{"version":3,"file":"static/chunks/pages/[[...slug]]-7743db94a27132f9.js","mappings":"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","sources":["webpack://_N_E/?4de1","webpack://_N_E/./core--client--components/src/components/atoms/ButtonLink/ButtonLink.tsx","webpack://_N_E/./core--client--components/src/components/atoms/Heading/Heading.tsx","webpack://_N_E/./core--client--components/src/components/atoms/Typography/TextClasses.ts","webpack://_N_E/./core--client--components/src/components/molecules/Quote/Quote.tsx","webpack://_N_E/./core--client--components/src/lib/constants/accents.ts","webpack://_N_E/./core--client--components/src/lib/utils/youtubeParser.tsx","webpack://_N_E/./core--client--components/src/lib/dataSource/contentful/containers/RichTextContainer/RichTextContainer.tsx","webpack://_N_E/./core--client--components/src/lib/hooks/accentContext/AccentContext.tsx","webpack://_N_E/./core--client--components/src/lib/hooks/overlayContext/OverlayContext.tsx","webpack://_N_E/./core--client--components/src/lib/loaders/contentfulImageLoader.ts","webpack://_N_E/./core--client--components/src/lib/utils/anchorTarget.tsx","webpack://_N_E/./core--client--components/src/lib/utils/stringReplace/common.ts","webpack://_N_E/./core--client--components/src/lib/utils/stringReplace/renderBreakLine.tsx","webpack://_N_E/./src/components/atoms/Divider/Divider.tsx","webpack://_N_E/./src/components/layouts/BlankLayout/BlankLayout.tsx","webpack://_N_E/./src/components/layouts/MinimalLayout/MinimalLayout.tsx","webpack://_N_E/./src/components/layouts/NoFooterLayout/NoFooterLayout.tsx","webpack://_N_E/./src/components/molecules/CardArticle/CardArticle.tsx","webpack://_N_E/./src/components/organisms/ArticlesDisplay/ArticlesDisplay.tsx","webpack://_N_E/./src/components/organisms/FullWidthCalloutImage/FullWidthCalloutImage.tsx","webpack://_N_E/./src/components/organisms/PageWrapper/PageWrapper.tsx","webpack://_N_E/./src/components/molecules/Toast/Toast.tsx","webpack://_N_E/./src/components/organisms/ToastHandler/ToastHandler.tsx","webpack://_N_E/./src/lib/analytics/handlers/eventLogHandler.ts","webpack://_N_E/./src/lib/analytics/handlers/klaviyoEventHandler.ts","webpack://_N_E/./src/lib/analytics/commonEmitter.ts","webpack://_N_E/./src/lib/analytics/eventEmitter.ts","webpack://_N_E/./src/lib/analytics/handlers/abstractAnalyticsHandler.ts","webpack://_N_E/./src/lib/analytics/handlers/googleTagManagerHandler.ts","webpack://_N_E/./src/lib/constants/constants/featureFlags.ts","webpack://_N_E/./src/lib/constants/constants/search.ts","webpack://_N_E/./src/lib/dataSource/lostApi/common.ts","webpack://_N_E/./src/lib/hooks/featureFlags/useOptimizelyFeature.ts","webpack://_N_E/./src/lib/hooks/toasts/Toast.tsx","webpack://_N_E/./src/lib/hooks/toasts/ToastStorage.ts","webpack://_N_E/./src/lib/dataSource/lostApi/chat/conversations/totalUnread.ts","webpack://_N_E/./src/lib/hooks/userContext/UserContext.tsx","webpack://_N_E/./src/lib/utils/ComponentFocused/ComponentFocused.tsx","webpack://_N_E/./src/lib/utils/analytics/startAddPet.ts","webpack://_N_E/./src/lib/utils/helpers/ObjectsHelpers/AppendAttributeIfExists.ts","webpack://_N_E/./src/lib/utils/helpers/stringHelpers/capitalizeFirstLetter.ts","webpack://_N_E/./src/lib/utils/helpers/ObjectsHelpers/getExpirationDate.ts","webpack://_N_E/./src/lib/utils/helpers/stringHelpers/parseToJSONSafe.ts","webpack://_N_E/./src/lib/utils/storage/session-storage.ts","webpack://_N_E/./src/components/molecules/ButtonPreview/ButtonPreview.tsx","webpack://_N_E/./core--client--components/src/components/molecules/AccordionContent/AccordionContent.tsx","webpack://_N_E/./core--client--components/src/components/organisms/AccordionFaq/AccordionFaq.tsx","webpack://_N_E/./core--client--components/src/lib/dataSource/contentful/containers/AccordionFaqContainer/AccordionFaqContainer.tsx","webpack://_N_E/./core--client--components/src/assets/images/load.svg","webpack://_N_E/./core--client--components/src/components/atoms/LoadingSpinner/LoadingSpinner.tsx","webpack://_N_E/./core--client--components/src/components/atoms/Button/Button.tsx","webpack://_N_E/./core--client--components/src/lib/dataSource/contentful/containers/ActionLinkContainer/ActionLinkContainer.tsx","webpack://_N_E/./core--client--components/src/components/molecules/CardArticle/CardArticle.tsx","webpack://_N_E/./core--client--components/src/components/molecules/CardImage/CardImage.tsx","webpack://_N_E/./core--client--components/src/components/molecules/InfoGraphicCard/InfoGraphicCard.tsx","webpack://_N_E/./core--client--components/src/lib/dataSource/contentful/containers/CardContainer/CardContainer.tsx","webpack://_N_E/./core--client--components/src/components/molecules/DisplayText/DisplayText.tsx","webpack://_N_E/./core--client--components/src/components/organisms/PageWrapper/PageWrapper.tsx","webpack://_N_E/./core--client--components/src/lib/dataSource/contentful/containers/DisplayTextContainer/DisplayTextContainer.tsx","webpack://_N_E/./core--client--components/src/components/molecules/CarouselButton/CarouselButton.tsx","webpack://_N_E/./core--client--components/src/lib/dataSource/contentful/containers/ElementSliderContainer/ElementSliderContainer.tsx","webpack://_N_E/./core--client--components/src/components/molecules/FeatureCard/FeatureCard.tsx","webpack://_N_E/./core--client--components/src/lib/dataSource/contentful/containers/FeatureCardContainer/FeatureCardContainer.tsx","webpack://_N_E/./core--client--components/src/components/molecules/FlexibleCard/FlexibleCard.tsx","webpack://_N_E/./core--client--components/src/lib/dataSource/contentful/containers/FlexibleCardContainer/FlexibleCardContainer.tsx","webpack://_N_E/./core--client--components/src/components/organisms/FullWidthCalloutBackgroundColor/FullWidthCalloutBackgroundColor.tsx","webpack://_N_E/./core--client--components/src/lib/dataSource/contentful/containers/FullWidthCalloutBackgroundColorContainer/FullWidthCalloutBackgroundColorContainer.tsx","webpack://_N_E/./core--client--components/src/components/organisms/Hero/Hero.tsx","webpack://_N_E/./core--client--components/src/lib/dataSource/contentful/containers/HeroContainer/HeroContainer.tsx","webpack://_N_E/./core--client--components/src/components/atoms/Blob/Blobs/BlobFour.tsx","webpack://_N_E/./core--client--components/src/components/atoms/Blob/Blobs/BlobOne.tsx","webpack://_N_E/./core--client--components/src/components/atoms/Blob/Blobs/BlobThree.tsx","webpack://_N_E/./core--client--components/src/components/atoms/Blob/Blobs/BlobTwo.tsx","webpack://_N_E/./core--client--components/src/components/atoms/Blob/Blobs/BlobList.ts","webpack://_N_E/./core--client--components/src/components/atoms/Blob/Blob.tsx","webpack://_N_E/./core--client--components/src/components/molecules/IconCard/IconCard.tsx","webpack://_N_E/./core--client--components/src/lib/dataSource/contentful/containers/IconCardContainer/IconCardContainer.tsx","webpack://_N_E/./core--client--components/src/lib/dataSource/contentful/containers/IframeContainer/IframeContainer.tsx","webpack://_N_E/./core--client--components/src/components/organisms/ImageContent1by1/ImageContent1by1.tsx","webpack://_N_E/./core--client--components/src/lib/dataSource/contentful/containers/ImageContent1By1Container/ImageContent1By1Container.tsx","webpack://_N_E/./core--client--components/src/components/atoms/InputField/InputStyling.ts","webpack://_N_E/./core--client--components/src/components/atoms/InputError/InputError.tsx","webpack://_N_E/./core--client--components/src/components/atoms/InputDropDown/InputDropDown.tsx","webpack://_N_E/./core--client--components/src/components/organisms/LinkList/LinkList.tsx","webpack://_N_E/./core--client--components/src/lib/dataSource/contentful/containers/LinkListContainer/LinkListContainer.tsx","webpack://_N_E/./core--client--components/src/components/organisms/LogoGrid/LogoGrid.tsx","webpack://_N_E/./core--client--components/src/lib/dataSource/contentful/containers/LogoGridContainer/LogoGridContainer.tsx","webpack://_N_E/./core--client--components/src/lib/dataSource/contentful/containers/MediaElementContainer/MediaElementContainer.tsx","webpack://_N_E/./core--client--components/src/components/molecules/PetAndOwnerCard/PetAndOwnerCard.tsx","webpack://_N_E/./core--client--components/src/lib/dataSource/contentful/containers/PetAndOwnerCardContainer/PetAndOwnerCardContainer.tsx","webpack://_N_E/./core--client--components/src/lib/dataSource/contentful/containers/ReunionCardContainer/ReunionCardContainer.tsx","webpack://_N_E/./core--client--components/src/lib/dataSource/contentful/containers/SeparatorContainer/SeparatorContainer.tsx","webpack://_N_E/./core--client--components/src/components/organisms/SideBySide/SideBySide.tsx","webpack://_N_E/./core--client--components/src/lib/dataSource/contentful/containers/SideBySideContainer/SideBySideContainer.tsx","webpack://_N_E/./core--client--components/src/components/organisms/SplitContent/SplitContent.tsx","webpack://_N_E/./core--client--components/src/lib/dataSource/contentful/containers/SplitContentContainer/SplitContentContainer.tsx","webpack://_N_E/./core--client--components/src/components/molecules/StatTickerCard/StatTickerCard.tsx","webpack://_N_E/./core--client--components/src/lib/dataSource/contentful/containers/StatsTickerContainer/StatsTickerContainer.tsx","webpack://_N_E/./core--client--components/src/components/molecules/TeamCard/TeamCard.tsx","webpack://_N_E/./core--client--components/src/lib/dataSource/contentful/containers/TeamCardContainer/TeamCardContainer.tsx","webpack://_N_E/./core--client--components/src/lib/dataSource/contentful/containers/TextBannerContainer/TextBannerContainer.tsx","webpack://_N_E/./core--client--components/src/lib/dataSource/contentful/containers/TypeFormContainer/TypeFormContainer.tsx","webpack://_N_E/./core--client--components/src/components/organisms/UnevenCard/UnevenCard.tsx","webpack://_N_E/./core--client--components/src/lib/dataSource/contentful/containers/UnevenCardContainer/UnevenCardContainer.tsx","webpack://_N_E/./core--client--components/src/lib/dataSource/contentful/containers/VideoPlayerContainer/VideoPlayerContainer.tsx","webpack://_N_E/./src/lib/dataSource/contentful/containers/BlockContainer/BlockContainer.tsx","webpack://_N_E/./src/lib/dataSource/contentful/containers/CarouselContainer/CarouselContainer.tsx","webpack://_N_E/./src/lib/utils/helpers/stringHelpers/removeBasePath.ts","webpack://_N_E/./src/lib/dataSource/contentful/containers/FullWidthCalloutContainer/FullWidthCalloutContainer.tsx","webpack://_N_E/./src/components/organisms/GraphicHero/GraphicHero.tsx","webpack://_N_E/./src/lib/dataSource/contentful/containers/GraphicHeroContainer/GraphicHeroContainer.tsx","webpack://_N_E/./src/components/organisms/HeroHomepage/HeroHomepage.tsx","webpack://_N_E/./src/lib/dataSource/contentful/containers/HeroHomeContainer/HeroHomeContainer.tsx","webpack://_N_E/./src/components/organisms/HeroIllustration/HeroIllustration.tsx","webpack://_N_E/./src/lib/dataSource/contentful/containers/HeroIllustrationContainer/HeroIllustrationContainer.tsx","webpack://_N_E/./src/lib/dataSource/contentful/containers/RelatedArticlesContainer/RelatedArticlesContainer.tsx","webpack://_N_E/./src/lib/dataSource/contentful/assemblyFactory.tsx","webpack://_N_E/./src/pages/[[...slug]].tsx","webpack://_N_E/<anon>"],"sourcesContent":["\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/[[...slug]]\",\n function () {\n return require(\"private-next-pages/[[...slug]].tsx\");\n }\n ]);\n if(module.hot) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/[[...slug]]\"])\n });\n }\n ","import Link, { LinkProps } from 'next/link';\nimport React, { HTMLProps, Ref } from 'react';\n\n/**\n * IButtonLink Interface for the ButtonLink component\n *\n * @interface\n */\nexport interface IButtonLink {\n /**\n * The version of the button to display either light or dark\n *\n * @memberof IButtonLink\n * @member {'light' | 'dark'} variant\n */\n variant: 'light' | 'dark' | 'lightBlue' | 'pink';\n /**\n * Whether the button is disabled\n *\n * @memberof IButtonLink\n * @default false\n * @member {boolean} [disabled]\n */\n disabled?: boolean;\n /**\n * The target of the link\n *\n * @memberof IButtonLink\n * @member {string} [target]\n */\n target?: string;\n /**\n * The children of the button\n *\n * @memberof IButtonLink\n * @member {string} children\n */\n children: string;\n /**\n * The color scheme used for the button link\n *\n * @memberof IButtonLink\n * @member {'primary' | 'secondary' | 'tertiary'} [color]\n */\n color?: 'primary' | 'secondary' | 'tertiary';\n /**\n * The ref of the button link\n *\n * @memberof IButtonLink\n * @member {Ref<HTMLAnchorElement>} [ref]\n */\n ref?: Ref<HTMLAnchorElement>;\n}\n\n/**\n * Button Link Props\n *\n * @type {ButtonLinkProps} Type That combines the IButtonLink interface with the\n * HTMLProps<HTMLAnchorElement> & LinkProps from NextJS\n */\nexport type ButtonLinkProps = IButtonLink &\n LinkProps &\n HTMLProps<HTMLAnchorElement>;\n\n/**\n * Button Base Font Properties This is the base font properties for the button.\n *\n * @constant\n */\nconst baseFont =\n 'font-petco text-base font-bold border-b-[3px] pb-1.5 border-b-solid focus:ring-invisible transition-colors duration-200 ease-in-out';\n\n/**\n * Variant Classes Map This map is used to map the variant prop to the\n * appropriate tailwind classes.\n *\n * @constant\n */\nconst variantClasses = {\n primary: {\n light:\n 'text-secondaryBase-400 border-base-300 hover:text-base-300 hover:border-base-300',\n dark: 'text-neutral-100 border-neutral-100 hover:text-base-300 hover:border-base-300',\n lightBlue:\n 'text-mkNavy-400 border-mkLightBlue-400 hover:text-mkNavy-400 hover:border-mkNavy-400',\n pink: 'text-mkNavy-400 border-mkPink-400 hover:text-mkNavy-400 hover:border-mkNavy-400',\n },\n secondary: {\n light:\n 'text-secondaryBase-400 border-mkPink-400 hover:text-secondaryBase-400 hover:border-secondaryBase-400',\n dark: 'text-mkPink-400 border-mkPink-400 hover:text-neutral-100 hover:border-neutral-100',\n lightBlue:\n 'text-mkNavy-400 border-mkLightBlue-400 hover:text-mkNavy-400 hover:border-mkNavy-400',\n pink: 'text-mkNavy-400 border-mkPink-400 hover:text-mkNavy-400 hover:border-mkNavy-400',\n },\n tertiary: {\n light:\n 'text-secondaryBase-400 border-mkLightBlue-400 hover:text-secondaryBase-400 hover:border-secondaryBase-400',\n dark: 'text-mkLightBlue-400 border-mkLightBlue-400 hover:text-neutral-100 hover:border-neutral-100',\n lightBlue:\n 'text-mkNavy-400 border-mkLightBlue-400 hover:text-mkNavy-400 hover:border-mkNavy-400',\n pink: 'text-mkNavy-400 border-mkPink-400 hover:text-mkNavy-400 hover:border-mkNavy-400',\n },\n};\n\n/**\n * Wrapper Focus Styles This is the focus styles for the button.\n *\n * @constant\n */\nconst wrapperFocusStyles =\n 'focus-visible:ring-1 focus-visible:ring-focus-400 focus-visible:rounded focus-visible:ring-offset-4 focus-visible:outline-0 focus-visible:outline-transparent';\n\n/**\n * Link Disabled Styles This is the disabled styles for the button.\n *\n * @constant\n */\nconst disabledStyles = {\n light: 'text-neutral-500 border-neutral-500 cursor-not-allowed',\n dark: 'text-neutral-300 border-neutral-300 cursor-not-allowed',\n lightBlue:\n 'text-neutral-400 border-neutral-400 hover:text-neutral-400 hover:border-neutral-400 cursor-not-allowed',\n pink: 'text-neutral-400 border-neutral-400 hover:text-neutral-400 hover:border-neutral-400 cursor-not-allowed',\n};\n\nconst removeFocusStyles =\n 'focus:outline-none focus:ring-0 focus-visible:ring-0 focus-visible:outline-none';\n\n/**\n * ButtonLink - A button used to navigate to a different page.\n *\n * @param {IButtonLink} props - The props for the ButtonLink component\n * @returns {React.FC<ButtonLinkProps>} Button Link Component\n */\nconst ButtonLink: React.FC<ButtonLinkProps> = ({\n variant,\n href,\n as,\n disabled = false,\n children,\n replace,\n scroll,\n shallow,\n passHref,\n className = '',\n color = 'primary',\n ...rest\n}: ButtonLinkProps) => {\n const variantStyles = disabled\n ? disabledStyles[variant]\n : variantClasses[color][variant];\n const cls = `${baseFont} ${variantStyles} ${wrapperFocusStyles}`;\n const dataTestId = `button-link-${variant}-${disabled}`;\n\n return (\n <div\n className={`${className} ${removeFocusStyles}`}\n data-testid={dataTestId}\n >\n <Link\n href={href}\n as={as}\n passHref={passHref}\n replace={replace}\n scroll={scroll}\n shallow={shallow}\n className={`${cls} ${removeFocusStyles}`}\n {...rest}\n >\n {children}\n </Link>\n </div>\n );\n};\n\nexport default ButtonLink;\n","import { headingFontClasses } from '@/component-library/atoms/Typography/TextClasses';\n\n/**\n * IHeading Interface for Heading component\n *\n * @interface\n */\nexport interface IHeading extends React.HTMLAttributes<HTMLHeadingElement> {\n /** The size of the heading. Can be 'h1', 'h2', 'h3', 'h4', 'h5', or 'h6'. */\n size: 'display1' | 'display2' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n /**\n * The font of the heading to display. Can be 'petco' or 'amasis'\n *\n * @default 'petco'\n */\n font?: 'petco' | 'amasis';\n /** The content of the heading. */\n children: string | React.ReactNode;\n}\n\n/**\n * Heading Type Types of headings allowed\n *\n * @type {'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'}\n */\ntype HeadingType = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n\n/**\n * Heading - The heading is used to encapsulate H1-H6 tags. It allows for the\n * size to be changed and the text to be passed in as a child.\n *\n * @param {IHeading} props - The props for the Heading component\n * @returns {React.FC<IHeading>} Heading Component\n */\nconst Heading: React.FC<IHeading> = ({\n size,\n font = 'petco',\n children,\n className,\n ...rest\n}: IHeading) => {\n let HeadingTag: HeadingType;\n // Set the Heading Tag based on the size prop passed in.\n if (size === 'display1' || size === 'display2') {\n HeadingTag = 'h1';\n } else {\n HeadingTag = size;\n }\n const headingFontClass = headingFontClasses[font];\n const fontTypeClass = font === 'petco' ? 'font-petco' : 'font-amasis';\n const tagClasses = `text-${size} ${fontTypeClass} ${headingFontClass} ${className}`;\n return (\n <HeadingTag className={tagClasses} data-testid={size} {...rest}>\n {children}\n </HeadingTag>\n );\n};\n\nexport default Heading;\n","/**\n * Heading Font Classes\n * Used to set particular classes for particular fonts\n * @constant\n */\nexport const headingFontClasses = {\n petco: 'font-bold',\n amasis: '',\n};\n\n/**\n * Body Size Classes\n * Used to the set the classes for the body size\n * @constant\n */\nexport const bodySizeClasses = {\n body1: 'text-[22px] leading-[32px]',\n body2: 'text-[20px] leading-[28px]',\n body3: 'text-[18px] leading-[26px]',\n body4: 'text-[16px] leading-[24px]',\n body5: 'text-[14px] leading-[22px]',\n overline: 'text-[12px] leading-[20px]',\n};\n\n/**\n * Body Styling Classes\n * Used to the set the classes for the body styling\n * @constant\n */\nexport const bodyStylingClasses = {\n regular: '',\n bold: 'font-bold',\n italic: 'italic',\n boldItalic: 'font-bold italic',\n link: 'text-base-400 underline',\n};\n","import Icon from '@/component-library/atoms/Icon/Icon';\n\n/**\n * IQuote This is the interface for the Quote component.\n *\n * @interface\n */\nexport interface IQuote {\n /** Quote text */\n text: string;\n /**\n * Optional Classes for component\n *\n * @default ''\n */\n classes?: string;\n}\n\n/**\n * Quote\n *\n * A component to display a quote\n *\n * @param {IQuote} props - The props for the Quote component\n * @returns {React.FC<IQuote>} Quote Component\n */\nconst Quote: React.FC<IQuote> = ({ text, classes = '' }) => {\n return (\n <div\n data-testid=\"quote\"\n className={`flex flex-col items-center ${classes}`}\n >\n <Icon icon=\"quote\" size={42} colorType=\"base\" colorShade={300}></Icon>\n <span>\n <h2 className=\"font-amasis font-light line-clamp-3 mt-[16px] md:mt-[24px] text-center text-h2 \">\n {text}\n </h2>\n </span>\n </div>\n );\n};\n\nexport default Quote;\n","/**\n * The Type of Accent\n */\nexport type AccentProps = 'org' | 'adopt' | 'care';\n/**\n * The Key of Accent\n */\ntype AccentKeys = 'ORG' | 'ADOPT' | 'CARE';\n\nexport const accentProps: Record<AccentKeys, AccentProps> = {\n ORG: 'org',\n ADOPT: 'adopt',\n CARE: 'care',\n};\n","import React from 'react';\n\n/**\n * Extracts the videoId from a YouTube URL and returns an iframe element for\n * embedding the video.\n *\n * @param {string} url - The YouTube URL from which to extract the videoId.\n * @returns {React.ReactNode} - The iframe element for embedding the video, or\n * null if the videoId is invalid or not found.\n */\nconst youtubeParser = (url: string): React.ReactElement | null => {\n // Extract videoId from the URL\n const match =\n /^.*((youtu.be\\/)|(v\\/)|(\\/u\\/\\w\\/)|(embed\\/)|(watch\\?))\\??v?=?([v]?[a-zA-Z0-9_-]{11}).*/.exec(\n url\n );\n\n const videoId = match && match[7].length === 11 ? match[7] : null;\n if (videoId) {\n return (\n <iframe\n className=\"aspect-video w-full mb-5 rounded-3xl\"\n title={`https://youtube.com/embed/${videoId}`}\n src={`https://youtube.com/embed/${videoId}`}\n allow=\"accelerometer; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n />\n );\n } else {\n return null;\n }\n};\n\nexport default youtubeParser;\n","import { InferContentfulResponse } from '@/component-library-lib/dataSource/contentful/helpers';\nimport { Topics } from '@/component-library-lib/dataSource/contentful/models/topics';\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\n\nimport { anchorTarget } from '@/component-library-lib/utils/anchorTarget';\nimport { addHttps } from '@/component-library-lib/utils/stringReplace/common';\nimport youtubeParser from '@/component-library-lib/utils/youtubeParser';\nimport AnimateItem from '@/component-library/atoms/AnimateItem/AnimateItem';\nimport ContentfulImage from '@/component-library/atoms/ContentfulImage/ContentfulImage';\nimport Heading from '@/component-library/atoms/Heading/Heading';\nimport Quote from '@/component-library/molecules/Quote/Quote';\nimport { Block, BLOCKS, Inline, INLINES } from '@contentful/rich-text-types';\nimport clsx from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * RichTextContainerProps\n *\n * @typedef RichTextContainerProps\n */\ntype RichTextContainerProps = InferContentfulResponse<Topics['RichText']> & {\n /** The optional className */\n className?: string;\n};\n\n/**\n * @param {RichTextContainerProps} props - RichTextContainerProps\n * @returns {React.ReactNode} - RichTextContainer\n */\nexport const RichTextContainer = (props: RichTextContainerProps) => {\n const columTablet = props.fields.columnsTablet\n ? `sm:col-span-${props.fields.columnsTablet} sm:col-start-${\n (6 - props.fields.columnsTablet) / 2 + 1\n }`\n : '';\n const columDesktop = props.fields.columnsDesktop\n ? `md:col-span-${props.fields.columnsDesktop} md:col-start-${\n (12 - props.fields.columnsDesktop) / 2 + 1\n }`\n : '';\n\n return (\n <div\n data-testid=\"rich-text-container\"\n className={clsx(\n props.fields.useContainer && 'page-max-w',\n props.fields.columnsTablet && 'sm:grid sm:grid-cols-6 sm:gap-6',\n props.fields.columnsDesktop && 'md:grid md:grid-cols-12 md:gap-8'\n )}\n >\n <div\n data-testid=\"rich-text-columns\"\n className={twMerge(\n 'prose-blockquote:border-0 font-petco leading-6 prose-li:p-0 prose-li:m-0 prose-li:marker:text-neutral-800 pt-16 pb-16 sm:pb-20 prose prose-h1:mb-6 prose-h2:mb-5 prose-h2:mt-0 prose-h3:mb-4 max-w-none',\n props.className,\n props.fields.customClasses,\n columTablet,\n columDesktop\n )}\n >\n {documentToReactComponents(props.fields.content, {\n renderNode: {\n /**\n * @param {object} _ - Node Data\n * @param {React.ReactNode} children - Node Children Tree\n * @returns {React.ReactNode} - ReactNode\n */\n [BLOCKS.HEADING_1]: (_, children) => (\n <Heading size=\"h1\" className=\"text-mkNavy-400\">\n {children}\n </Heading>\n ),\n\n /**\n * @param {object} _ - Node Data\n * @param {React.ReactNode} children - Node Children Tree\n * @returns {React.ReactNode} - ReactNode\n */\n [BLOCKS.HEADING_2]: (_, children) => (\n <Heading size=\"h2\" className=\"text-mkNavy-400\">\n {children}\n </Heading>\n ),\n\n /**\n * @param {object} _ - Node Data\n * @param {React.ReactNode} children - Node Children Tree\n * @returns {React.ReactNode} - ReactNode\n */\n [BLOCKS.HEADING_3]: (_, children) => (\n <Heading size=\"h3\" className=\"text-mkNavy-400\">\n {children}\n </Heading>\n ),\n\n /**\n * @param {object} _ - Node Data\n * @param {React.ReactNode} children - Node Children Tree\n * @returns {React.ReactNode} - ReactNode\n */\n [BLOCKS.HEADING_4]: (_, children) => (\n <Heading size=\"h4\" className=\"text-mkNavy-400\">\n {children}\n </Heading>\n ),\n\n /**\n * @param {object} _ - Node Data\n * @param {React.ReactNode} children - Node Children Tree\n * @returns {React.ReactNode} - ReactNode\n */\n [BLOCKS.HEADING_5]: (_, children) => (\n <Heading size=\"h5\" className=\"text-mkNavy-400\">\n {children}\n </Heading>\n ),\n\n /**\n * @param {object} _ - Node Data\n * @param {React.ReactNode} children - Node Children Tree\n * @returns {React.ReactNode} - ReactNode\n */\n [BLOCKS.HEADING_6]: (_, children) => (\n <Heading size=\"h6\" className=\"text-mkNavy-400\">\n {children}\n </Heading>\n ),\n\n /**\n * @param {object} _ - Node Data\n * @param {React.ReactNode} children - Node Children Tree\n * @returns {React.ReactNode} - ReactNode\n */\n [BLOCKS.LIST_ITEM]: (_, children) => (\n <li className=\"[&>p]:m-0\">{children}</li>\n ),\n\n /**\n * @param {object} _ - Node Data\n * @param {React.ReactNode} children - Node Children Tree\n * @returns {React.ReactNode} - ReactNode\n */\n [BLOCKS.QUOTE]: (_, children) => (\n <AnimateItem\n delay={0}\n className=\"sm:grid sm:grid-cols-6 sm:gap-6 md:grid-cols-8 md:gap-8\"\n >\n <Quote\n text={children as string}\n classes=\"mx-auto [&>span>h2>p]:m-0 [&>span>h2.font-light]:font-normal sm:col-span-4 sm:col-start-2 md:col-span-6 md:col-start-2\"\n />\n </AnimateItem>\n ),\n\n /**\n * @param {Block | Inline} node - The node\n * @returns {React.ReactElement} - Image Component\n */\n [BLOCKS.EMBEDDED_ASSET]: (node) => (\n <AnimateItem delay={0}>\n <div className=\"flex items-center justify-center my-8 md:my-12\">\n <ContentfulImage\n className=\"rounded-3xl\"\n width={node.data.target.fields.file.details.image.width}\n height={node.data.target.fields.file.details.image.height}\n alt={node.data.target.fields.title}\n src={addHttps(node.data.target.fields.file.url)}\n />\n </div>\n </AnimateItem>\n ),\n /**\n * @param {object} node - Node Data\n * @param {object} node.data - Node Data\n * @param {React.ReactNode} children - Node Children Tree\n * @returns {React.ReactNode | void} - ReactNode\n */\n [INLINES.HYPERLINK]: ({ data }, children) => {\n // Only process youtube links\n if (\n data.uri &&\n (data.uri.includes('youtube.com') ||\n data.uri.includes('youtu.be'))\n ) {\n return youtubeParser(data.uri);\n } else {\n return anchorTarget(data.uri, children);\n }\n },\n /**\n * @param {object} _ - Node Data\n * @param {React.ReactNode} children - Node Children\n * @returns {React.ReactNode} - ReactNode\n */\n [BLOCKS.PARAGRAPH]: (_, children) => {\n const textStyle = {\n fontSize: props.fields.contentTextSize ?? 'inherit',\n textAlign: props.fields.contentTextAlignment ?? undefined,\n color: props.fields.contentColor ?? 'inherit',\n };\n return <p style={textStyle}>{children}</p>;\n },\n },\n })}\n </div>\n </div>\n );\n};\n","/**\n * This file contains the context object for the accent value. The accent value\n * is used to introduce variations to components styling in a global way to\n * ensure consistency, and to avoid prop drilling. We currently have 3 main\n * accents: care, adopt and org/lost\n */\nimport {\n AccentProps,\n accentProps,\n} from '@/component-library-lib/constants/accents';\nimport { createContext, useContext, useState } from 'react';\n\n/** The context object for the accent value */\ntype AccentValueProps = {\n /** The current accent value */\n accent: AccentProps;\n /** Update the accent value */\n updateAccent: (newAccent: AccentProps) => void;\n};\n\nexport const AccentContext = createContext<AccentValueProps | null>(null);\n\n/**\n * Custom hook to access the current accent value from the AccentContext.\n *\n * @returns {string} - The current accent value.\n */\nexport const useAccent = () => {\n const currentAccentContext = useContext(AccentContext);\n if (!currentAccentContext) {\n throw new Error('useAccent must be used within an AccentProvider');\n }\n return currentAccentContext;\n};\n\n/**\n * The AccentProvider component\n *\n * @param {object} props - The properties passed to the component.\n * @param {React.ReactNode} props.children - The child components.\n * @param {AccentProps} props.defaultAccent - The default accent value.\n * @returns {React.ReactNode} The rendered component.\n */\nconst AccentProvider: React.FC<\n React.PropsWithChildren & {\n /** The default accent value */\n defaultAccent?: AccentProps;\n }\n> = ({ children, defaultAccent }) => {\n // State to hold the current accent value\n const [accent, setAccent] = useState<AccentProps>(\n defaultAccent || accentProps.ORG\n );\n\n /**\n * Updates the accent value.\n *\n * @param {string} newAccent - The new accent value.\n * @returns {void}\n */\n const updateAccent = (newAccent: AccentProps) => {\n setAccent(newAccent);\n };\n\n // Value object to be passed to the context provider\n const accentValue: AccentValueProps = {\n accent,\n updateAccent,\n };\n\n return (\n // Provide the AccentContext with the accentValue\n <AccentContext.Provider value={accentValue}>\n {children}\n </AccentContext.Provider>\n );\n};\n\nexport default AccentProvider;\n","import { createContext, useContext, useState } from 'react';\n\n/** The context object for the overlay value */\ntype OverlayValueProps = {\n /** The current overlay value */\n show: boolean;\n /** Update the overlay value */\n updateShow: (newOverlay: boolean) => void;\n};\n\n// @ts-expect-error: runtime error is preferred here to make it obvious we're missing a provider\nexport const OverlayContext = createContext<OverlayValueProps>(null);\n\n/**\n * Custom hook to access the current overlay value from the OverlayContext.\n *\n * @returns {boolean} - The current overlay value.\n */\nexport const useOverlay = () => {\n const currentOverlayContext = useContext(OverlayContext);\n if (!currentOverlayContext) {\n throw new Error('useOverlay must be used within an OverlayProvider');\n }\n return currentOverlayContext;\n};\n\n/**\n * Generates a function comment for the given function body.\n *\n * @param {object} props - The properties passed to the component.\n * @param {React.ReactNode} props.children - The child components.\n * @param {boolean} props.defaultOverlay - The default overlay value.\n * @returns {React.ReactNode} The rendered component.\n */\nconst OverlayProvider: React.FC<\n React.PropsWithChildren & {\n /** The default overlay value */\n defaultOverlay?: boolean;\n }\n> = ({ children, defaultOverlay }) => {\n // State to hold the current overlay value\n const [show, setShow] = useState<boolean>(defaultOverlay || false);\n\n /**\n * Updates the overlay value.\n *\n * @param {string} newOverlay - The new overlay value.\n * @returns {void}\n */\n const updateShow = (newOverlay: boolean) => {\n setShow(newOverlay);\n };\n\n // Value object to be passed to the context provider\n const overlayValue: OverlayValueProps = {\n show,\n updateShow,\n };\n\n return (\n // Provide the OverlayContext with the overlayValue\n <OverlayContext.Provider value={overlayValue}>\n {children}\n </OverlayContext.Provider>\n );\n};\n\nexport default OverlayProvider;\n","import { ImageLoaderProps } from \"next/legacy/image\";\n\n/**\n * Loads images from the CDN\n *\n * @param {ImageLoaderProps} params- Image loader props\n * @returns {string} - Image URL\n */\nfunction contentFulImageLoader({\n src,\n width,\n quality,\n}: ImageLoaderProps): string {\n if (quality) {\n return `${src}?q=${quality}&w=${width}&fm=webp`;\n } else {\n return `${src}?w=${width}&fm=webp`;\n }\n}\n\nexport default contentFulImageLoader;\n","import CdnImage from '@/component-library/atoms/CdnImage/CdnImage';\n\n/**\n * Renders an anchor element with a target attribute based on the provided URI.\n *\n * @param {string} uri - The URI to link to.\n * @param {React.ReactNode} children - The content to display within the anchor\n * element.\n * @returns {React.Element} The rendered anchor element.\n */\nexport function anchorTarget(uri: string, children: React.ReactNode) {\n const isPetcoLink =\n uri.includes('https://petcolove.org/') || uri.startsWith('/');\n\n return (\n <a\n href={uri}\n target={isPetcoLink ? '_self' : '_blank'}\n rel={isPetcoLink ? '' : 'noopener noreferrer'}\n className=\"text-neutral-800 hover:text-base-300 underline focus-visible:ring-1 focus-visible:ring-focus-400\"\n >\n {children}\n {!isPetcoLink && (\n <span className=\"ml-0.5 mr-1 relative -top-0.5\">\n <CdnImage\n src=\"/assets/lost/external-link.png\"\n alt=\"↗\"\n width={12}\n height={12}\n />\n </span>\n )}\n </a>\n );\n}\n","/**\n * Function to handle the case where the URL starts with \"//\" or is missing the\n * https from the string and adds \"https:\" to the beginning.\n *\n * @param {string} url The url to check for missing https\n * @returns {string} The url with https\n */\nexport function addHttps(url?: string): string {\n if (!url) return '';\n\n if (url.startsWith('//')) {\n url = 'https:' + url;\n } else if (!url.startsWith('https://') && !url.startsWith('http://')) {\n url = 'https://' + url;\n }\n return url;\n}\n","\n/**\n * Inserts an Html break line when a new line is present at the text parameter\n *\n * @param {string} text - String to parse\n * @returns {string} The generated output with html break lines\n */\nexport const renderBreakLine = (text: string) => {\n return text.split('\\n').flatMap((text, i) => [i > 0 && <br key={i} />, text]);\n};\n","/** The colors that can be used for the divider */\nexport type DividerColor = 'darkGrey' | 'lightGrey' | 'white';\n\n/**\n * IDivider Interface for the Divider component\n *\n * @interface IDivider\n */\nexport interface IDivider {\n /**\n * The color of divider to display.\n *\n * @memberof IDivider\n * @member {DividerColor} type\n */\n type: DividerColor;\n /**\n * The optional classes to be applied to the component.\n *\n * @memberof IDivider\n * @default ''\n * @member {string} [classes]\n */\n classes?: string;\n}\n\n/**\n * Divider Class Map The class map for the divider component.\n *\n * @constant\n */\nconst dividerClassMap = {\n darkGrey: 'border-neutral-600 bg-neutral-600',\n lightGrey: 'border-neutral-300 bg-neutral-300',\n white: 'border-neutral-100 bg-neutral-100',\n};\n\n/**\n * Divider - Divider Element for separating content.\n *\n * @param {IDivider} props - The props for the Divider component\n * @returns {React.FC<IDivider>} Divider Component\n */\nconst Divider: React.FC<IDivider> = ({ type, classes = '' }: IDivider) => {\n const dividerClasses = `border-top-[.5px] w-full ${dividerClassMap[type]} ${classes}`;\n return <hr data-testid=\"divider\" className={dividerClasses} />;\n};\n\nexport default Divider;\n","import Head from 'next/head';\n\n/**\n * IBlankLayout\n *\n * @interface IBlankLayout\n */\nexport interface IBlankLayout {\n /**\n * The children of the Blank Layout\n *\n * @memberof IBlankLayout\n * @member {React.ReactNode} children\n */\n children: React.ReactNode;\n}\n\n/**\n * Blank Layout Used to display the layout of the application.\n *\n * @param {IBlankLayout} props - The props for the Blank Layout component.\n * @returns {React.FC<IBlankLayout>} BlankLayout Component\n */\nconst BlankLayout: React.FC<IBlankLayout> = ({ children }: IBlankLayout) => {\n return (\n <>\n <Head>\n <title>Petco Love Lost</title>\n </Head>\n <main data-testid=\"blankLayout\">{children}</main>\n </>\n );\n};\n\nexport default BlankLayout;\n","import Footer from '@/components/organisms/Footer/Footer';\nimport { mockFooterProps } from '@/components/organisms/Footer/Footer.mocks';\nimport Navbar from '@/components/organisms/Navbar/Navbar';\nimport ToastHandler from '@/components/organisms/ToastHandler/ToastHandler';\n\n/**\n * IMinimalLayout\n *\n * @augments React.ComponentPropsWithoutRef<'div'>\n * @interface IMinimalLayout\n */\nexport interface IMinimalLayout extends React.ComponentPropsWithoutRef<'div'> {\n /**\n * The children of the component\n *\n * @memberof IMinimalLayout\n * @member {React.ReactNode} children\n */\n children: React.ReactNode;\n}\n\n/**\n * Minimal Layout Used to display the minimal layout of the application.\n *\n * @param {IMinimalLayout} props - The props for the MinimalLayout component.\n * @returns {React.FC<IMinimalLayout>} MinimalLayout Component\n */\nconst MinimalLayout: React.FC<IMinimalLayout> = ({\n children,\n}: IMinimalLayout) => {\n return (\n <>\n <Navbar minimal={true} />\n <main data-testid=\"minimalLayout\">\n {children}\n <ToastHandler />\n </main>\n <Footer {...mockFooterProps.base} />\n </>\n );\n};\n\nexport default MinimalLayout;\n","import Navbar from '@/components/organisms/Navbar/Navbar';\nimport ToastHandler from '@/components/organisms/ToastHandler/ToastHandler';\nimport { useUserContext } from '@/lib/hooks/userContext/UserContext';\n\n/**\n * INoFooterLayout\n *\n * @interface INoFooterLayout\n */\nexport interface INoFooterLayout {\n /**\n * The children of the component\n *\n * @memberof INoFooterLayout\n * @member {React.ReactNode} children\n */\n children: React.ReactNode;\n}\n\n/**\n * NoFooter Layout Used to display the layout of the application without a\n * footer.\n *\n * @param {INoFooterLayout} props - The props for the NoFooterLayout component.\n * @returns {React.FC<INoFooterLayout>} NoFooterLayout Component\n */\nconst NoFooterLayout: React.FC<INoFooterLayout> = ({\n children,\n}: INoFooterLayout) => {\n const { hasMessage, isFetchingUser, isLoggedIn, isShelter } =\n useUserContext();\n return (\n <>\n <Navbar\n isFetchingUser={isFetchingUser}\n loggedIn={isLoggedIn}\n isShelter={isShelter}\n hasMessage={hasMessage}\n />\n <main data-testid=\"noFooterLayout\">\n {children}\n <ToastHandler />\n </main>\n </>\n );\n};\n\nexport default NoFooterLayout;\n","import Paragraph from '@/components/atoms/Paragraph/Paragraph';\n\nimport Image, { ImageLoader } from 'next/legacy/image';\nimport Link from 'next/link';\n\n/**\n * ICardArticle Interface for the Card Article Component\n *\n * @interface ICardArticle\n */\nexport interface ICardArticle {\n /**\n * Title of the Article for the Card\n *\n * @memberof ICardArticle\n * @member {string} title\n */\n title: string;\n /**\n * The Excerpt of the Article to Display\n *\n * @memberof ICardArticle\n * @member {string} excerpt\n */\n excerpt: string;\n /**\n * The Image of the Article to display\n *\n * @memberof ICardArticle\n * @member {string} image\n */\n image: string;\n /**\n * The optional classes for the component\n *\n * @memberof ICardArticle\n * @default ''\n * @member {string} [classes]\n */\n classes?: string;\n /**\n * The optional imageClasses for the component\n *\n * @memberof ICardArticle\n * @default ''\n * @member {string} [imageClasses]\n */\n imageClasses?: string;\n /**\n * Url of the article to link to\n *\n * @memberof ICardArticle\n * @member {string} url\n */\n url: string;\n /**\n * The optional target for the url\n *\n * @memberof ICardArticle\n * @default '_self'\n * @member {'_blank' | '_self' | '_parent' | '_top'} [target]\n */\n target?: '_blank' | '_self' | '_parent' | '_top';\n /**\n * The loader function for the image\n *\n * @memberof ICardArticle\n * @member {ImageLoader} [loader]\n */\n loader?: ImageLoader;\n}\n\n/**\n * Card Article The Card Article Component that links to an url and displays an\n * image, title and excerpt\n *\n * @param {ICardArticle} props - The props for the Card Article Component\n * @returns {React.FC<ICardArticle>} Card Article Component\n */\nconst CardArticle: React.FC<ICardArticle> = ({\n title,\n excerpt,\n image,\n classes = '',\n url,\n imageClasses = '',\n target = '_self',\n loader,\n}: ICardArticle) => {\n return (\n <div\n data-testid=\"card-article\"\n className={`w-full cursor-pointer [&:has(:focus-visible)]:ring-1 [&:has(:focus-visible)]:ring-focus-400 sm:rounded-[20px] md:rounded-3xl ${classes}`}\n >\n <Link\n href={url}\n className=\"w-full focus:ring-0 focus:ring-offset-0 focus-visible:ring-offset-0 focus-visible:ring-0 focus-visible:border-none focus-visible:outline-none\"\n target={target}\n >\n <div\n className={`h-[218px] sm:h-[140px] md:h-72 relative rounded-2xl sm:rounded-[20px] md:rounded-3xl flex overflow-hidden ${imageClasses}`}\n >\n <Image\n data-testid=\"card-article-image\"\n src={image}\n layout=\"fill\"\n alt={`Image of ${title}`}\n objectFit=\"cover\"\n className=\"scale-100 hover:scale-[102%] transition-transform duration-100\"\n loader={loader}\n sizes=\"(max-width: 739px) 100vw, (max-width: 1199px) 33vw, 450px\"\n />\n </div>\n <div className=\"w-full mt-4 md:mt-6\">\n <span className=\"font-bold font-petco text-h5 text-mkNavy-400 line-clamp-2\">\n {title}\n </span>\n <Paragraph size=\"body4\" className=\"mt-3 font-petco line-clamp-2\">\n {excerpt}\n </Paragraph>\n </div>\n </Link>\n </div>\n );\n};\n\nexport default CardArticle;\n","import contentFulImageLoader from '@/component-library-lib/loaders/contentfulImageLoader';\nimport AnimateItem from '@/component-library/atoms/AnimateItem/AnimateItem';\nimport ButtonLink, {\n IButtonLink,\n} from '@/component-library/atoms/ButtonLink/ButtonLink';\nimport Heading from '@/components/atoms/Heading/Heading';\nimport CardArticle, {\n ICardArticle,\n} from '@/components/molecules/CardArticle/CardArticle';\n\n/**\n * IButtonLinkWithHref Interface for a Button link with a href\n *\n * @augments IButtonLink\n * @interface IButtonLinkWithHref\n */\nexport interface IButtonLinkWithHref extends IButtonLink {\n /**\n * The button link url\n *\n * @memberof IButtonLinkWithHref\n * @member {string} href\n */\n href: string;\n}\n\n/**\n * IArticlesDisplay Interface for ArticlesDisplay component\n *\n * @interface IArticlesDisplay\n */\nexport interface IArticlesDisplay {\n /**\n * The title of the articles display.\n *\n * @memberof IArticlesDisplay\n * @member {string} title\n */\n title: string;\n /**\n * An array of card articles to display.\n *\n * @memberof IArticlesDisplay\n * @member {ICardArticle[]} articles\n */\n articles: ICardArticle[];\n /**\n * The optional button link.\n *\n * @memberof IArticlesDisplay\n * @member {IButtonLinkWithHref} [buttonLink]\n */\n buttonLink?: IButtonLinkWithHref;\n /**\n * The optional classes to be applied to the component.\n *\n * @memberof IArticlesDisplay\n * @default ''\n * @member {string} [classes]\n */\n classes?: string;\n /**\n * The optional imageClasses to be applied to the image inside a card.\n *\n * @memberof IArticlesDisplay\n * @default ''\n * @member {string} [imageClasses]\n */\n imageClasses?: string;\n}\n\n/**\n * ArticlesDisplay Organism for displaying articles\n *\n * @param {IArticlesDisplay} props - The props for the ArticlesDisplay component\n * @returns {React.FC<IArticlesDisplay>} ArticlesDisplay Component\n */\nconst ArticlesDisplay: React.FC<IArticlesDisplay> = ({\n title,\n articles,\n buttonLink,\n classes = '',\n imageClasses = '',\n}: IArticlesDisplay) => {\n return (\n <div\n data-testid=\"articles-display\"\n className={`max-w-[1360px] mx-auto ${classes}`}\n >\n <AnimateItem from={{ translateY: 20 }}>\n <div className=\"flex flex-col justify-between mb-8 space-y-4 sm:flex-row sm:space-y-0 sm:items-center md:mb-12\">\n <Heading size=\"h3\" font=\"petco\" className=\"text-secondaryBase-400 \">\n {title}\n </Heading>\n {buttonLink && <ButtonLink {...buttonLink} />}\n </div>\n </AnimateItem>\n {articles && (\n <div className=\"grid sm:grid-cols-3 grid-cols-1 md:gap-x-8 gap-6\">\n {articles.map((article, index) => (\n <div className=\"flex items-center justify-stretch\" key={index}>\n <CardArticle\n {...article}\n imageClasses={imageClasses}\n loader={contentFulImageLoader}\n />\n </div>\n ))}\n </div>\n )}\n </div>\n );\n};\n\nexport default ArticlesDisplay;\n","import { anchorTarget } from '@/component-library-lib/utils/anchorTarget';\nimport { renderBreakLine } from '@/component-library-lib/utils/stringReplace/renderBreakLine';\nimport AnimateItem from '@/component-library/atoms/AnimateItem/AnimateItem';\nimport CdnImage from '@/component-library/atoms/CdnImage/CdnImage';\nimport Button, { IButton } from '@/components/atoms/Button/Button';\nimport Heading from '@/components/atoms/Heading/Heading';\nimport Paragraph from '@/components/atoms/Paragraph/Paragraph';\nimport {\n documentToReactComponents,\n Options,\n} from '@contentful/rich-text-react-renderer';\nimport { BLOCKS, Document, INLINES, MARKS } from '@contentful/rich-text-types';\nimport Image, { ImageLoader } from 'next/legacy/image';\nimport React from 'react';\n\n/**\n * Base Class\n *\n * @constant\n */\nconst baseClass = `text-neutral-100 text-center`;\n\nconst options: Options = {\n renderNode: {\n /**\n * @param {object} _ - Node Data\n * @param {React.ReactNode} children - Node Children Tree\n * @returns {React.ReactNode} - ReactNode\n */\n [BLOCKS.PARAGRAPH]: (_, children) => (\n <Paragraph\n size=\"body4\"\n className={`${baseClass} text-center mb-6 lg:mb-10`}\n >\n {children}\n </Paragraph>\n ),\n\n /**\n * @param {object} node - Node Data\n * @param {object} node.data - Node Data\n * @param {React.ReactNode} children - Node Children Tree\n * @returns {React.ReactNode | void} - ReactNode\n */\n [INLINES.HYPERLINK]: ({ data }, children) => {\n // Only process youtube links\n if (data.uri) {\n return anchorTarget(data.uri, children);\n }\n },\n },\n renderMark: {\n /**\n * Bold text\n *\n * @param {React.ReactNode} text - Text to render\n * @returns {React.ReactNode} - The formatted text\n */\n [MARKS.BOLD]: (text) => <strong className=\"font-petco\">{text}</strong>,\n /**\n * Italic text\n *\n * @param {React.ReactNode} text - Text to render\n * @returns {React.ReactNode} - The formatted text\n */\n [MARKS.ITALIC]: (text) => <em className=\"font-petco\">{text}</em>,\n },\n renderText: renderBreakLine,\n};\n\n/**\n * IWrapper Interface for React components that only receives 1 children as a\n * prop.\n *\n * @interface IWrapper\n */\nexport interface IWrapper {\n /**\n * - React children passed via props.\n *\n * @memberof IWrapper\n * @member {React.ReactNode} [children]\n */\n children?: React.ReactNode;\n}\n\n/**\n * IFullWidthCallout Interface for Full Width Callout component\n *\n * @interface IFullWidthCalloutImage\n */\nexport interface IFullWidthCalloutImage {\n /**\n * The overline text to display.\n *\n * @memberof IFullWidthCalloutImage\n * @member {string} [overline]\n */\n overline?: string;\n /**\n * The headline text to display.\n *\n * @memberof IFullWidthCalloutImage\n * @member {React.ReactNode | string} [title]\n */\n title?: React.ReactNode | string;\n /**\n * The content text to display.\n *\n * @memberof IFullWidthCalloutImage\n * @member {string | React.ReactNode} [body]\n */\n body?: string | React.ReactNode;\n /**\n * The content text to display with RichText support.\n *\n * @memberof IFullWidthCalloutImage\n * @member {Document} [bodyRichText]\n */\n bodyRichText?: Document;\n /**\n * The first button to display.\n *\n * @memberof IFullWidthCalloutImage\n * @member {IButton} [button1]\n */\n button1?: IButton;\n /**\n * The second button to display.\n *\n * @memberof IFullWidthCalloutImage\n * @member {IButton} [button2]\n */\n button2?: IButton;\n /**\n * The image url to display.\n *\n * @memberof IFullWidthCalloutImage\n * @member {string} imageUrl\n */\n imageUrl: string;\n /**\n * The opacity of the image. 0-1\n *\n * @memberof IFullWidthCalloutImage\n * @member {number} [imageOpacity]\n */\n imageOpacity?: number;\n /**\n * The optional classes\n *\n * @memberof IFullWidthCalloutImage\n * @default ''\n * @member {string} [classes]\n */\n classes?: string;\n /**\n * A JSX Element to wrap the text and style it.\n *\n * @memberof IFullWidthCalloutImage\n * @member {React.FC<IWrapper>} [TextWrapper]\n */\n TextWrapper?: React.FC<IWrapper>;\n /**\n * The loader function for the image\n *\n * @memberof IFullWidthCalloutImage\n * @member {ImageLoader} [loader]\n */\n loader?: ImageLoader;\n}\n\n/**\n * Full Width Callout Full width callout image component. Takes in overline,\n * headline, content and buttons\n *\n * @param {IFullWidthCalloutImage} props - The props of the Full Width Callout\n * @returns {React.FC<IFullWidthCalloutImage>} Full Width Callout Component\n */\nconst FullWidthCalloutImage: React.FC<IFullWidthCalloutImage> = ({\n overline,\n title,\n body,\n bodyRichText,\n button1,\n button2,\n imageUrl,\n imageOpacity = 0.5,\n classes = '',\n TextWrapper,\n loader,\n}: IFullWidthCalloutImage) => {\n const firstButton = button1 ? button1 : null;\n const secondButton = button2 ? button2 : null;\n const Wrapper = TextWrapper\n ? TextWrapper\n : ({ children }: IWrapper) => (\n <AnimateItem from={{ translateY: 20 }}>{children}</AnimateItem>\n );\n\n return (\n <div\n className={`w-full flex justify-center bg-black ${classes}`}\n data-testid=\"full-width-callout\"\n >\n <div className=\"w-full py-24 md:py-[168px] relative flex justify-center px-6 sm:px-8\">\n <div className=\"z-[1]\">\n <Wrapper>\n {overline && (\n <Paragraph\n size=\"body5\"\n className={`${baseClass} capitalize mb-2 md:mb-4`}\n >\n {overline}\n </Paragraph>\n )}\n {title && (\n <Heading\n size=\"h2\"\n font=\"amasis\"\n className={`${baseClass} text-center mb-2 md:mb-4 [&>*]:text-neutral-100`}\n >\n {title}\n </Heading>\n )}\n\n {bodyRichText && documentToReactComponents(bodyRichText, options)}\n\n {!bodyRichText && body && (\n <Paragraph size=\"body4\" className={`${baseClass} text-center`}>\n {body}\n </Paragraph>\n )}\n\n <div className=\"mt-6 lg:mt-8 flex flex-wrap justify-center\">\n {firstButton && (\n <Button\n {...firstButton}\n data-testid=\"first-button\"\n className=\"mb-4 mx-2\"\n />\n )}\n {secondButton && (\n <Button\n {...secondButton}\n data-testid=\"second-button\"\n className=\"mb-4 mx-2\"\n />\n )}\n </div>\n </Wrapper>\n </div>\n\n {loader ? (\n <Image\n src={imageUrl}\n layout=\"fill\"\n objectFit=\"cover\"\n alt={'Full Width Callout Image'}\n objectPosition=\"center\"\n style={{\n opacity: imageOpacity,\n }}\n loader={loader}\n ></Image>\n ) : (\n <CdnImage\n src={imageUrl}\n layout=\"fill\"\n objectFit=\"cover\"\n alt=\"Full Width Callout Image\"\n objectPosition=\"center\"\n style={{\n opacity: imageOpacity,\n }}\n />\n )}\n </div>\n </div>\n );\n};\n\nexport default FullWidthCalloutImage;\n","import { ReactNode } from 'react';\n\n/**\n * IPageWrapper\n *\n * @interface IPageWrapper\n */\nexport interface IPageWrapper {\n /**\n * The content of the page.\n *\n * @memberof IPageWrapper\n * @member {ReactNode} children\n */\n children: ReactNode;\n /**\n * The classes to apply to the component.\n *\n * @memberof IPageWrapper\n * @default ''\n * @member {string} [classes]\n */\n classes?: string;\n}\n\n/**\n * Page Wrapper Used to wrap the entire page in a fixed size container.\n *\n * @param {IPageWrapper} props - The props for the PageWrapper component\n * @returns {React.FC<IPageWrapper>} PageWrapper Component\n */\nconst PageWrapper: React.FC<IPageWrapper> = ({\n children,\n classes = '',\n}: IPageWrapper) => {\n return <div className={`max-w-[1440px] mx-auto ${classes}`}>{children}</div>;\n};\n\nexport default PageWrapper;\n","import { ColorShade } from '@/components/atoms/Colors/Colors';\nimport Icon, { IconType } from '@/components/atoms/Icon/Icon';\nimport Paragraph from '@/components/atoms/Paragraph/Paragraph';\nimport { ToastType } from '@/lib/hooks/toasts/Toast';\nimport { ReactNode } from 'react';\n\n/**\n * Styling Map Holds all the classes for the particular types of Toast Messages\n *\n * @constant\n */\nconst stylingMap = {\n success: 'bg-success-200 text-neutral-100',\n error: 'bg-error-200 text-neutral-100',\n warning: 'bg-warning-200 text-neutral-100',\n info: 'bg-info-200 text-neutral-100',\n};\n\n/**\n * Icon Map Hold all of the mappings for particular icons and statuses\n *\n * @constant\n */\nconst iconMap: {\n [key: string]: {\n /** The Icon to use */\n icon: IconType;\n /** The Color Shade to use with the Icon */\n colorShade: ColorShade;\n };\n} = {\n success: {\n icon: 'checkCircle',\n colorShade: 100,\n },\n error: {\n icon: 'exclamationCircle',\n colorShade: 100,\n },\n info: {\n icon: 'infoOutline',\n colorShade: 100,\n },\n warning: {\n icon: 'exclamationTriangle',\n colorShade: 100,\n },\n};\n\n/** Screen Sizing Holds all the specific Styles for each of the screen sizes */\nconst mobileSizing = 'right-6 top-16 left-6 max-w-[328px]';\nconst tabletSizing = 'sm:right-8 sm:top-20 sm:left-8 sm:max-w-[680px]';\nconst desktopSizing = 'md:right-8 md:top-24 md:left-8 md:max-w-[896px]';\n\n/**\n * IToast Toast Interface\n *\n * @interface IToast\n */\nexport interface IToast {\n /**\n * Type of Toast to Display\n *\n * @memberof IToast\n * @member {ToastType} type\n */\n type: ToastType;\n /**\n * Should we show the Icon or Not?\n *\n * @memberof IToast\n * @member {boolean} [showIcon]\n */\n showIcon?: boolean;\n /**\n * Close Click Handler\n *\n * @memberof IToast\n * @member {() => void} closeClick\n */\n closeClick: () => void;\n /**\n * Children to be displayed in the Toast\n *\n * @memberof IToast\n * @member {ReactNode} children\n */\n children: ReactNode;\n}\n\n/**\n * Toast Toast Component\n *\n * @param {IToast} props - The props for the Toast component\n * @returns {React.FC<IToast>} Toast Component\n */\nconst Toast: React.FC<IToast> = ({\n type,\n children,\n closeClick,\n showIcon,\n}: IToast) => {\n const baseToastClasses = `fixed inline-flex items-center m-auto py-3 inset-x-0 rounded min-h-[48px] z-30 ${mobileSizing} ${tabletSizing} ${desktopSizing}`;\n const toastClasses = `${baseToastClasses} ${stylingMap[type]}`;\n return (\n <div data-testid=\"toast\" className={toastClasses}>\n <div className=\"inline-flex w-full h-full justify-center items-center\">\n {showIcon ? (\n <div className=\"ml-[18px]\" data-testid=\"toast-icon\">\n <Icon\n icon={iconMap[type].icon}\n size={20}\n colorShade={iconMap[type].colorShade}\n colorType=\"neutral\"\n />\n </div>\n ) : null}\n <div className=\"ml-[18px]\">\n <Paragraph className=\"text-neutral-100\" size=\"body4\" styling=\"bold\">\n {children}\n </Paragraph>\n </div>\n <div className=\"mx-4 ml-auto flex items-center\">\n <button data-testid=\"toast-delete\" onClick={() => closeClick()}>\n <span className=\"sr-only\">Dismiss</span>\n <Icon\n icon=\"close\"\n size={25}\n colorShade={iconMap[type].colorShade}\n colorType=\"neutral\"\n />\n </button>\n </div>\n </div>\n </div>\n );\n};\n\nexport default Toast;\n","import Toast from '@/components/molecules/Toast/Toast';\nimport { IToastAction, useToastContext } from '@/lib/hooks/toasts/Toast';\nimport { useCheckAndDispatchToastFromStorage } from '@/lib/hooks/toasts/ToastStorage';\nimport { useEffect } from 'react';\n\n/**\n * IToastHandler\n *\n * @interface IToastHandler\n */\nexport interface IToastHandler {\n /**\n * An Initial Toast to Show when rendering\n *\n * @memberof IToastHandler\n * @member {IToastAction} [initialToast]\n */\n initialToast?: IToastAction;\n /**\n * How long to show a non persistent toast.\n *\n * @memberof IToastHandler\n * @default 2000\n * @member {number} [timeToShow]\n */\n timeToShow?: number;\n}\n\n/**\n * Toast Handler Handles Displaying Toast Messages\n *\n * @param {IToastHandler} props - The props for the Toast Handler component\n * @returns {React.FC<IToastHandler>} Toast Handler Component\n */\nconst ToastHandler: React.FC<IToastHandler> = ({\n initialToast,\n timeToShow = 3000,\n}: IToastHandler) => {\n const toastContext = useToastContext();\n const toastDispatch = toastContext.dispatch;\n const toastState = toastContext.state;\n\n /** If Initial Toast Action Create an Initial Toast */\n useEffect(() => {\n if (initialToast) {\n toastDispatch(initialToast);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useCheckAndDispatchToastFromStorage();\n\n /** Close Toast Dispatches a Delete Toast action when we close the Toast */\n const closeToast = () => {\n const currentToast = toastState.toasts[0];\n toastDispatch({\n type: 'DELETE_TOAST',\n toast: {\n type: currentToast.type,\n message: currentToast.message,\n id: currentToast.id,\n persistent: currentToast.persistent,\n },\n });\n };\n\n if (toastState.toasts.length > 0) {\n if (!toastState.toasts[0].persistent) {\n setTimeout(() => {\n closeToast();\n }, timeToShow);\n }\n }\n\n return (\n <div data-testid=\"toast-handler\">\n {toastState.toasts.length > 0 ? (\n <Toast {...toastState.toasts[0]} closeClick={closeToast}>\n {toastState.toasts[0].message}\n </Toast>\n ) : null}\n </div>\n );\n};\n\nexport default ToastHandler;\n","import AbstractAnalyticsHandler, { IEvent } from './abstractAnalyticsHandler';\n/**\n * EventLogHandler\n *\n * This will console log all the event data\n *\n * YOU WILL NEED TO UPDATE THE next.config.js TO ALLOW CONSOLE LOGS\n *\n * @augments AbstractAnalyticsHandler\n * @class\n */\nexport default class EventLogHandler extends AbstractAnalyticsHandler {\n /**\n * @memberof EventLogHandler\n * @param {IEvent} data - The data to be sent with the event\n */\n send(data: IEvent) {\n const analyticFeature = this.getAnalyticsFeature();\n\n /**\n * The data object to be sent to the console\n *\n * @memberof EventLogHandler\n * @member {object} dataObject\n */\n const dataObject: {\n /** The data associated with the event */\n data: object;\n /** The feature flags that are enabled */\n feature: string;\n } = {\n data: data.data,\n feature: analyticFeature,\n };\n\n console.log('EventLogHandler:', dataObject);\n }\n}\n","import getBasePath from '@/lib/utils/getBasePath/getBasePath';\nimport axios from 'axios';\nimport AbstractAnalyticsHandler, { IEvent } from './abstractAnalyticsHandler';\n\n/**\n * KlaviyoEventHandler\n *\n * @augments AbstractAnalyticsHandler\n */\nexport default class KlaviyoEventHandler extends AbstractAnalyticsHandler {\n /** @param {IEvent} data - The data to be sent with the event */\n async send(data: IEvent) {\n const eventData = {\n data: {\n type: 'event',\n attributes: {\n properties: data.data.attributes,\n time: new Date(),\n metric: {\n data: {\n type: 'metric',\n attributes: {\n name: data.name,\n },\n },\n },\n profile: {\n data: {\n type: 'profile',\n attributes: data.data.profile,\n },\n },\n },\n },\n };\n axios.post(`${getBasePath()}/api/klaviyo/events`, eventData);\n }\n}\n","import { googleTagManagerBrand } from '../constants/constants/analytics';\nimport EventEmitter from './eventEmitter';\nimport EventLogHandler from './handlers/eventLogHandler';\nimport GoogleTagManagerHandler from './handlers/googleTagManagerHandler';\nimport KlaviyoEventHandler from './handlers/klaviyoEventHandler';\n\n/** Instances of each handler class */\nconst logEventHandler = new EventLogHandler(googleTagManagerBrand);\nconst gtmEventHandler = new GoogleTagManagerHandler(googleTagManagerBrand);\nconst klaviyoEventHandler = new KlaviyoEventHandler(googleTagManagerBrand);\n\n/** Instances of each emitter */\nexport const logEventEmitter = new EventEmitter([logEventHandler]);\nexport const gtmEventEmitter = new EventEmitter([gtmEventHandler]);\n\n/** DefaultEventEmitter to contain all handlers */\nexport const defaultEventEmitter = new EventEmitter([\n logEventHandler,\n gtmEventHandler,\n]);\n\n/** KlaviyoEventEmitter to contain Klaviyo related handlers */\nexport const klaviyoEventEmitter = new EventEmitter([\n logEventHandler,\n klaviyoEventHandler,\n]);\n","import AbstractAnalyticsHandler, {\n IEvent,\n} from './handlers/abstractAnalyticsHandler';\n\n/**\n * EventEmitter\n *\n * This will be used to dispatch each event to the appropriate handler\n *\n * @class\n */\nexport default class EventEmitter {\n /**\n * The handlers to be used for each event\n *\n * @memberof EventEmitter\n * @member {AbstractAnalyticsHandler[]} handlers\n */\n private handlers: AbstractAnalyticsHandler[];\n\n /** @param {AbstractAnalyticsHandler[]} handlers - Instances of handlerClasses */\n constructor(handlers: AbstractAnalyticsHandler[]) {\n this.handlers = handlers;\n }\n\n /**\n * The event handler\n *\n * @param {IEvent} data - Information about the event\n */\n handleEvent(data: IEvent) {\n this.handlers.forEach((handler) => {\n handler.send(data);\n });\n }\n}\n","import { notApplicableString } from '@/lib/constants/constants/analytics';\nimport { analyticsFeatureKey } from '@/lib/utils/featureFlags/optimizely/featureFlagOverride';\nimport CookieStorage from '@/lib/utils/storage/cookie-storage';\n\n/** @typedef validTypes - Valid types for event data */\ntype ValidTypes = string | number | boolean | object | null | undefined;\n\n/** @typedef eventData - How to pass the data within the event */\ntype EventData = { [key: string]: ValidTypes };\n\n/**\n * Describes the base event structure\n *\n * @interface IEvent\n */\nexport interface IEvent {\n /**\n * The name of the event\n *\n * @memberof IEvent\n * @member {string} name\n */\n name: string;\n /**\n * The data associated with the event\n *\n * @memberof IEvent\n * @member {EventData} data - The data associated with the event\n */\n data: EventData;\n}\n\n/**\n * Provides an abstract class for analytics handlers\n *\n * @abstract\n * @class\n * @name analyticsHandler\n */\nexport default abstract class AbstractAnalyticsHandler {\n /**\n * The source platform of the event data\n *\n * @memberof AbstractAnalyticsHandler\n * @member {string} brand\n */\n brand: string;\n\n /**\n * @memberof AbstractAnalyticsHandler\n * @param {string} brand - The source platform of the event data\n */\n constructor(brand: string) {\n this.brand = brand;\n }\n\n /**\n * @memberof AbstractAnalyticsHandler\n * @returns {string} - The analytic feature that is enabled\n * @protected\n */\n protected getAnalyticsFeature(): string {\n const cookies = new CookieStorage();\n const optimizelyDecision = cookies.get(analyticsFeatureKey) as {\n /** The analytic feature that is enabled */\n analytic: string;\n };\n let feature: string = notApplicableString;\n if (optimizelyDecision && optimizelyDecision.analytic) {\n // Split the string into an array\n feature = optimizelyDecision.analytic;\n }\n return feature;\n }\n\n /**\n * @memberof AbstractAnalyticsHandler\n * @abstract\n * @param {IEvent} data - The data to be sent with the event\n */\n abstract send(data: IEvent): void;\n}\n","import AbstractAnalyticsHandler, { IEvent } from './abstractAnalyticsHandler';\n\n/**\n * GoogleTagManagerHandler\n *\n * @augments AbstractAnalyticsHandler\n */\nexport default class GoogleTagManagerHandler extends AbstractAnalyticsHandler {\n /** @param {IEvent} data - The data to be sent with the event */\n send(data: IEvent) {\n const feature = this.getAnalyticsFeature();\n /** The data object to be sent to Google Tag Manager */\n const dataObject: { [key: string]: string | string[] } = {\n brand: this.brand,\n ...data.data,\n feature,\n };\n gtag('event', data.name, dataObject);\n }\n}\n","/**\n * The feature flag for the persistent search used by shelters\n *\n * @constant {string}\n */\nexport const flagShelterPersistentSearch =\n 'test_flag_persistent_search_shelter';\n\n/**\n * The feature flag for the map search.\n *\n * @constant {string}\n */\nexport const flagMapSearch = 'test_flag_map_search';\n\n/**\n * The feature flag for the map version of search-all.\n *\n * @constant {string}\n */\nexport const flagMapPages = 'test_flag_map_pages';\n\n/**\n * The feature flag for the map search results page.\n *\n * @constant {string}\n */\nexport const flagMapSearchResults = 'test_flag_map_search_results';\n\n/**\n * The feature flag for the microchip creation search.\n *\n * @constant {string}\n */\nexport const flagMicrochipCreationSearch =\n 'test_flag_microchip_creation_search';\n\n/**\n * The feature flag for the facebook integration.\n *\n * @constant {string}\n */\nexport const flagFacebookIntegration = 'test_flag_facebook_integration';\n\n/**\n * The feature flag for the static map in the address step.\n *\n * @constant {string}\n */\nexport const flagStaticMapInAddressStep =\n 'test_flag_static_map_in_address_step';\n","/** The default search radius */\nexport const defaultSearchRadius = 50;\n\n/** The default search radius index (should point to defaultSearchRadius) */\nexport const defaultSearchRadiusIndex = 2;\n\n/**\n * The coordinates of Petco Love HQ. Used as a fallback location if no\n * coordinates are provided.\n */\nexport const petcoLoveHQCoordinates = {\n latitude: 29.44241,\n longitude: -98.655,\n};\n","import { PetcoLoveSDK } from '@petcolove/lost--client--api-sdk';\n\n/**\n * Initialize the SDK\n *\n * @returns {PetcoLoveSDK} The SDK instance\n */\nexport function initSDK(): PetcoLoveSDK {\n /**\n * The PLL API base URL\n *\n * @constant {string | undefined} pllApiBaseUrl\n */\n const pllApiBaseUrl =\n process.env.NEXT_PUBLIC_PLL_API_BASE_URL ??\n process.env.STORYBOOK_PLL_API_BASE_URL;\n /**\n * The PLL Websocket base URL\n *\n * @constant {string | undefined} pllWebsocketBaseUrl\n */\n const pllWebsocketBaseUrl =\n process.env.NEXT_PUBLIC_PLL_WEBSOCKET_BASE_URL ??\n process.env.STORYBOOK_PLL_WEBSOCKET_BASE_URL;\n\n if (!pllApiBaseUrl) {\n throw new Error('NEXT_PUBLIC_PLL_API_BASE_URL is not defined');\n }\n\n if (!pllWebsocketBaseUrl) {\n throw new Error('NEXT_PUBLIC_PLL_WEBSOCKET_BASE_URL is not defined');\n }\n\n const sdk = new PetcoLoveSDK(pllApiBaseUrl, pllWebsocketBaseUrl);\n\n return sdk;\n}\n\nexport const sdk: PetcoLoveSDK = initSDK();\n","import { featureFlagOverrideKey } from '@/lib/utils/featureFlags/optimizely/featureFlagOverride';\nimport CookieStorage from '@/lib/utils/storage/cookie-storage';\nimport { useDecision } from '@optimizely/react-sdk';\nimport { useEffect, useState } from 'react';\n\n/**\n * Hook to get the enabled features\n *\n * @param {string} flag - The flag to check\n * @returns {boolean} Is the feature enabled\n */\nexport const useOptimizelyFeature = (flag: string): boolean => {\n const cookies = new CookieStorage();\n const overrideCookie = cookies.get(featureFlagOverrideKey);\n const [enabled, setEnabled] = useState(() => overrideCookie === flag);\n const [decision, clientReady] = useDecision(flag);\n\n useEffect(() => {\n // Check if optimizely has the feature flag and if the client is ready\n if (clientReady && decision.enabled === true) {\n setEnabled(true);\n }\n }, [decision, clientReady]);\n return enabled;\n};\n","import { createContext, ReactNode, useContext, useReducer } from 'react';\n\n/**\n * Toast Type Types of Toasts Allowed\n *\n * @typedef {ToastType}\n */\nexport type ToastType = 'success' | 'error' | 'info' | 'warning';\n\n/** Toast Action Types Actions Allowed for Toast */\nexport type ToastActionType = 'ADD_TOAST' | 'DELETE_TOAST';\n\n/**\n * Toast Toast Type\n *\n * @typedef {Toast}\n */\nexport type Toast = {\n /** Id of Toast */\n id: string;\n /** Message to Display */\n message?: string;\n /** If the Toast is Persistent */\n persistent?: boolean;\n /** If the Toast should show an Icon */\n showIcon?: boolean;\n /** Type of Toast */\n type: ToastType;\n};\n\n/**\n * Toast State State of the Toasts\n *\n * @interface\n */\ninterface IToastState {\n /** Array of Toasts */\n toasts: Toast[];\n}\n\n/**\n * Toast Initial State Value\n *\n * @constant\n */\nexport const toastInitialValue: IToastState = {\n toasts: [],\n};\n\n/**\n * Toast Init Config\n *\n * @param {IToastState} state - The State to Init the Config with\n * @returns {object} - The Initial Config\n */\nexport const initConfig = (state: IToastState) => ({\n ...toastInitialValue,\n ...state,\n});\n\n/**\n * IToastAction Interface for Toast Actions\n *\n * @interface\n */\nexport interface IToastAction {\n /** Type of Action */\n type: ToastActionType;\n /** Toast to Add or Delete */\n toast: Toast;\n}\n\n/**\n * Toast Context Used for creating the Context Object for the useToastContext\n * Function\n *\n * @constant\n */\nexport const ToastContext = createContext<{\n /** The State of the Toasts */\n state: IToastState;\n /** The Dispatch Function for the Toasts */\n dispatch: React.Dispatch<IToastAction>;\n}>({\n state: toastInitialValue,\n /** @returns {null} - Null */\n dispatch: () => null,\n});\n\n/**\n * Toast Reducer Reducer for adding and removing Toasts\n *\n * @param {IToastState} state - The State of the Toasts\n * @param {IToastAction} action - The Action to Perform on the Toasts\n * @returns {object} - The Updated State\n */\nexport function ToastReducer(state: IToastState, action: IToastAction) {\n switch (action.type) {\n case 'ADD_TOAST': {\n return {\n ...state,\n toasts: [...state.toasts, action.toast],\n };\n }\n case 'DELETE_TOAST': {\n const updatedToasts = state.toasts.filter((e) => e.id != action.toast.id);\n return {\n ...state,\n toasts: updatedToasts,\n };\n }\n }\n}\n\n/**\n * IToast Provider The Interface for what the Toast Provider will be expecting\n *\n * @interface\n */\nexport interface IToastProvider {\n /** The Children to Provide Context to */\n children: ReactNode;\n}\n\n/**\n * Toast Provider Used to provide the ability to use Toasts to any children of\n * the provider.\n *\n * @param {IToastProvider} children - The children this will be providing\n * Context to.\n * @returns {Element} ToastContext\n */\nexport function ToastProvider({ children }: IToastProvider): JSX.Element {\n const [state, dispatch] = useReducer(ToastReducer, toastInitialValue);\n\n return (\n <ToastContext.Provider value={{ state, dispatch }}>\n {children}\n </ToastContext.Provider>\n );\n}\n\n/**\n * Use Toast Context Used to allow components to interact with the Toast Context\n *\n * @returns {ToastContext} ToastContext\n */\nexport const useToastContext = () => useContext(ToastContext);\n","import { tomorrow } from '@/lib/utils/helpers/dateHelpers/dates';\nimport LocalStorage from '@/lib/utils/storage/local-storage';\nimport { useEffect } from 'react';\nimport { Toast, ToastType, useToastContext } from './Toast';\n\n/** Props for the buildToastPayload fn */\ntype BuildToastPayloadProps = {\n /** Toast id */\n id?: string;\n /** Toast type */\n type: ToastType;\n /** Toast message */\n message: string;\n};\n\n/**\n * Generates a toast payload for the local storage\n *\n * @param {object} param - Function params\n * @param {string} [param.id] - The toast id\n * @param {ToastType} param.type - The toast type\n * @param {string} param.message - The toast message\n * @returns {object} - The built toast payload\n */\nconst buildToastPayload = ({\n id = '1',\n type,\n message,\n}: BuildToastPayloadProps) => {\n return {\n id,\n type: type,\n message: message,\n persistent: false,\n showIcon: true,\n };\n};\n\nconst STORAGE_TOAST_KEY = 'toast';\n\n/**\n * Saves the toast payload to local storage\n *\n * @returns {Function} A function to save toast info into the local storage\n */\nexport const useSaveToastToStorage = () => {\n const storage = new LocalStorage();\n\n return (type: ToastType, message: string, id?: string) =>\n storage.set(STORAGE_TOAST_KEY, buildToastPayload({ id, type, message }), {\n expires: tomorrow,\n });\n};\n\n/**\n * Looks for the STORAGE_TOAST_KEY in local storage and dispatches a new toast\n * if that's the case.\n */\nexport const useCheckAndDispatchToastFromStorage = () => {\n const storage = new LocalStorage();\n const toast = storage.get(STORAGE_TOAST_KEY) as Toast | null;\n\n const { dispatch } = useToastContext();\n\n useEffect(() => {\n if (toast) {\n dispatch({\n type: 'ADD_TOAST',\n toast,\n });\n\n storage.delete('toast');\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(toast)]);\n};\n","import { sdk } from '@/lib/dataSource/lostApi/common';\nimport { IConversationTotalUnreadCountResponseData } from '@petcolove/lost--client--api-sdk/dist/concrete/sdks/interfaces/chat';\n\n/**\n * The params for the total unread conversation\n *\n * @interface IConversationTotalUnreadCountParams\n */\ninterface IConversationTotalUnreadCountParams {\n /** The auth token */\n authToken: string;\n /** The user entity id */\n userEntityId: number;\n}\n\n/**\n * Get the total of unread conversation\n *\n * @param {IConversationTotalUnreadCountParams} params - The params for the total unread function\n * @returns {Promise<IConversationTotalUnreadCountResponseData>} The list of all\n * conversations\n */\nexport async function totalUnread({\n authToken,\n userEntityId,\n}: IConversationTotalUnreadCountParams): Promise<IConversationTotalUnreadCountResponseData> {\n try {\n const conversations = await sdk\n .conversationsTotalUnread({\n contextId: userEntityId,\n authToken,\n })\n .read();\n return conversations.data;\n } catch (error) {\n console.error(error);\n throw error;\n }\n}\n","import { totalUnread } from '@/lib/dataSource/lostApi/chat/conversations/totalUnread';\nimport useMe, { IUseMe } from '@/lib/hooks/me/useMe';\nimport {\n Context,\n Dispatch,\n ReactNode,\n SetStateAction,\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\n\n/** The types of users that can be returned */\nexport type UserType = 'shelter' | 'user';\n\n/**\n * The type used to create the context\n *\n * @interface\n */\nexport interface IUserContext extends IUseMe {\n /** If the user has unread messages */\n hasMessage: boolean;\n /** A method for returning the user type */\n userType: UserType | null;\n /** The number of unread messages for the user */\n unreadMessageCount: number;\n /** The fetch state of unread messages count */\n fetchingUnreadMessageCount: boolean;\n /** The logged in state of the user */\n isLoggedIn: boolean;\n /** Whether if the logged in user is a shelter or not */\n isShelter: boolean;\n /** The function to get unread messages for user */\n getUnreadMessagesForUser: () => Promise<void>;\n /** The unreadMessageCount setter */\n setUnreadMessageCount: Dispatch<SetStateAction<number>>;\n}\n\n/**\n * The default user context\n *\n * @constant {IUserContext}\n */\nexport const defaultUserContext: IUserContext = {\n hasMessage: false,\n userType: null,\n isFetchingUser: true,\n isLoggedIn: false,\n isShelter: true,\n unreadMessageCount: 0,\n fetchingUnreadMessageCount: false,\n getUnreadMessagesForUser:\n /** The default function to get unread messages for user */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n async () => {},\n setUnreadMessageCount:\n /** The default function to set the unread message count */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n () => {},\n};\n\n/**\n * The UserContext\n *\n * @constant {Context<IUserContext>}\n */\nconst UserContext: Context<IUserContext> =\n createContext<IUserContext>(defaultUserContext);\n\n/**\n * The interface for the UserProvider props\n *\n * @interface\n */\nexport interface IUserProvider {\n /** The children wrapped by the provider */\n children: ReactNode;\n}\n\n/**\n * The UserContextProvider component.\n *\n * @param {IUserProvider} props - The props for the UserContextProvider.\n * @returns {Element} - The UserContextProvider.\n */\nexport function UserContextProvider({ children }: IUserProvider): JSX.Element {\n /**\n * The data from the me hook\n *\n * @see useMe\n */\n const { idToken, me, isFetchingUser, isError, errorMessage } = useMe();\n /**\n * The total unread message count\n *\n * @constant {number}\n */\n const [unreadMessageCount, setUnreadMessageCount] = useState<number>(0);\n /**\n * The fetch state of unread messages count\n *\n * @constant {boolean}\n */\n const [fetchingUnreadMessageCount, setFetchingUnreadMessageCount] =\n useState(true);\n /**\n * If the user has unread messages\n *\n * @constant {boolean}\n */\n const hasMessage = useMemo(\n () => unreadMessageCount > 0,\n [unreadMessageCount]\n );\n\n /** This will determine the type of user that is currently logged in. */\n const userType = useMemo(() => {\n let userType: UserType | null = null;\n\n if (me?.awos) {\n userType = 'shelter';\n } else if (me?.user && !me?.awos) {\n userType = 'user';\n }\n return userType;\n }, [me?.awos, me?.user]);\n\n /**\n * The logged in state of the user We get it by checking if we are able to get\n * a user type from the me object\n *\n * @constant {boolean}\n */\n const isLoggedIn = useMemo(() => {\n return !isFetchingUser && userType !== null;\n }, [isFetchingUser, userType]);\n\n /**\n * Whether if the logged in user is a shelter or not\n *\n * We explicitly check if the user type is of type 'user' so we do not show\n * user specific options while we determine the user type\n *\n * @constant {boolean}\n */\n const isShelter = useMemo(() => {\n if (userType === 'user') {\n return false;\n }\n return true;\n }, [userType]);\n\n /**\n * Callback to get the total unread messages for a user\n *\n * @returns {void}\n */\n const getUnreadMessagesForUser = useCallback(async () => {\n if (!me || !idToken || userType === 'shelter')\n return setUnreadMessageCount(0);\n /**\n * @property {string} id - The user id\n * @property {string} idToken - The user idToken\n */\n const {\n user: { id },\n } = me;\n try {\n /**\n * The response from the totalUnread function\n *\n * @property {number} unread - The total unread messages for a user\n */\n const { unread } = await totalUnread({\n authToken: idToken,\n userEntityId: id,\n });\n\n if (unread !== unreadMessageCount) {\n setUnreadMessageCount(unread);\n }\n } catch (error) {\n console.error('Error fetching unread messages', error);\n } finally {\n setFetchingUnreadMessageCount(false);\n }\n }, [idToken, me, unreadMessageCount, userType]);\n\n /** Make initial call for unread messages */\n useEffect(() => {\n getUnreadMessagesForUser();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [idToken, me]);\n\n return (\n <UserContext.Provider\n value={{\n idToken,\n hasMessage,\n me,\n userType,\n isLoggedIn,\n isShelter,\n isFetchingUser,\n getUnreadMessagesForUser,\n unreadMessageCount,\n setUnreadMessageCount,\n fetchingUnreadMessageCount,\n isError,\n errorMessage,\n }}\n >\n {children}\n </UserContext.Provider>\n );\n}\n\n/**\n * A hook to access the UserContext\n *\n * @returns {IUserContext} - The UserContext\n */\nexport const useUserContext = (): IUserContext => useContext(UserContext);\n","import { useEffect, useRef, useState } from 'react';\n\n/**\n * Returns a reference and a state that changes when the component is clicked\n * outside\n *\n * @param {boolean} initialIsFocused - Initial focus state\n * @returns {object} - Object with ref and isFocused state\n */\nexport function useComponentFocused(initialIsFocused: boolean) {\n const [isComponentFocused, setIsComponentFocused] =\n useState(initialIsFocused);\n\n const ref = useRef<HTMLInputElement>(null);\n\n /**\n * Handles click outside of the component\n *\n * @param {MouseEvent} event - The event object\n * @returns {void}\n */\n const handleClickOutside = (event: MouseEvent) => {\n if (ref.current && !ref.current.contains(event.target as Node)) {\n setIsComponentFocused(false);\n } else {\n setIsComponentFocused(true);\n }\n };\n\n useEffect(() => {\n document.addEventListener('click', handleClickOutside, true);\n return () => {\n document.removeEventListener('click', handleClickOutside, true);\n };\n }, []);\n\n return { ref, isComponentFocused, setIsComponentFocused };\n}\n","import { defaultEventEmitter } from '@/lib/analytics/commonEmitter';\nimport { notApplicableString } from '@/lib/constants/constants/analytics';\nimport { PetStatus } from '@/lib/constants/types/analytics';\nimport { InferredSpecies } from '@/lib/constants/types/pets';\n\n/**\n * Start Add Pet Event Handler Data\n *\n * @interface IStartAddPetEventData\n */\nexport interface IStartAddPetEventData {\n /** Click Text */\n clickText: string;\n /** Where the add pet was initiated */\n context: 'Dashboard' | 'Sign Up Flow';\n /** Pet Status */\n petStatus?: PetStatus;\n /** What type of user is creating the pet */\n listingSource: 'Consumer Pet Listing' | 'Shelter Pet Listing';\n /** Pet Species */\n species?: InferredSpecies;\n}\n\n/**\n * Send the start add pet event to google analytics\n *\n * @param {IStartAddPetEventData} data - The data to send\n */\nexport const startAddPetEventHandler = ({\n clickText,\n context,\n petStatus,\n listingSource,\n species,\n}: IStartAddPetEventData) => {\n const eventData = {\n name: 'start_add_pet',\n data: {\n click_text: clickText,\n context,\n items: [\n {\n pet_id: notApplicableString,\n pet_name: notApplicableString,\n pet_status: petStatus || notApplicableString,\n listing_source: listingSource,\n species: species || notApplicableString,\n location_id: notApplicableString,\n },\n ],\n },\n };\n defaultEventEmitter.handleEvent(eventData);\n};\n","/* eslint-disable jsdoc/tag-lines */\n/**\n * Helper function used to append a key:value pair to an object definition if\n * the value is not undefined.\n *\n * @example\n * const isUndefined = undefined;\n *\n * const objectWithNoUndefinedValues = {\n * key1: 'value1',\n * ...appendAttributeIfExists('newKey', 'not sure if is not undefined'),\n * ...appendAttributeIfExists('newKeyUndefined', isUndefined),\n * };\n *\n * // result { key1:'value1', newKey: 'not sure if is not undefined' }\n *\n * @param {string} key - The key of the key:value pair\n * @param {unknown} value - The value of the key:value pair\n * @returns {object} - The object used to append to the object definition\n */\nconst appendAttributeIfExists = (\n key: string,\n value: unknown\n): { [key: string]: unknown } => (value !== undefined ? { [key]: value } : {});\n\nexport default appendAttributeIfExists;\n","/**\n * Capitalize the first letter of a string\n *\n * @param {string | null} str - The string to capitalize\n * @returns {string} The capitalized string\n */\nexport default function capitalizeFirstLetter(str?: string | null): string {\n /** Check if the string is empty */\n if (!str) {\n return '';\n }\n\n /** Capitalize the first letter and concatenate it with the rest of the string */\n return str[0].toUpperCase() + str.slice(1);\n}\n","/**\n * Get the expiration date from the data.\n *\n * @param {object | null} data - The data.\n * @returns {Date | null} - The expiration date or null if not found.\n */\nfunction getExpirationDate(\n data: { [key: string]: unknown } | null\n): Date | null {\n if (\n data !== null &&\n 'expiration' in data &&\n data?.expiration &&\n typeof data.expiration === 'string'\n ) {\n /**\n * The expiration date from the data.\n *\n * @constant {Date} expirationDate\n */\n const expirationDate = new Date(data.expiration);\n\n if (!isNaN(expirationDate.getTime())) {\n return expirationDate;\n }\n console.error('Invalid expiration date: ', data.expiration);\n }\n\n return null;\n}\n\nexport default getExpirationDate;\n","/**\n * A helper function to parse a JSON string safely\n *\n * @param {string} str - The string to parse\n * @returns {string | object} - The parsed JSON object or the string\n */\nfunction parseToJSONSafe(str: string): string | { [key: string]: unknown } {\n try {\n return JSON.parse(str);\n } catch (error) {\n console.error('Unable to parse string to JSON: ', str);\n }\n return str;\n}\n\nexport default parseToJSONSafe;\n","import getExpirationDate from '../helpers/ObjectsHelpers/getExpirationDate';\nimport parseToJSONSafe from '../helpers/stringHelpers/parseToJSONSafe';\nimport AbstractStorage, { IStorageConfig } from './abstract-storage';\n\n/**\n * SessionStorage Session Storage is a storage that is available only in the\n * current browser tab. It is cleared when the tab is closed. It is not shared\n * between tabs.\n *\n * @augments AbstractStorage\n * @class\n */\nexport default class SessionStorage extends AbstractStorage {\n /**\n * Whether the session storage is available.\n *\n * @returns {boolean} - Whether the session storage is available.\n */\n private isAvailable(): boolean {\n return typeof window !== 'undefined';\n }\n\n /**\n * Get Get the data from the session storage.\n *\n * @param {string} id - The id of the data to get.\n * @returns {object | null} - The data or null if not found.\n */\n get(id: string): object | string | null {\n if (!this.isAvailable()) {\n return null;\n }\n const data = sessionStorage.getItem(id);\n\n if (!data) {\n return null;\n }\n\n // Parse the data and check if the expiration date is passed\n const parsedData = parseToJSONSafe(data);\n\n if (typeof parsedData === 'string') {\n return parsedData;\n }\n /**\n * The data expiration date.\n *\n * @constant {Date | null} expirationDate\n */\n const expirationDate = getExpirationDate(parsedData);\n\n if (expirationDate && expirationDate < new Date()) {\n this.delete(id);\n return null;\n }\n return parsedData;\n }\n\n /**\n * Set Set the data in the session storage.\n *\n * @param {string} id - The id of the data to set.\n * @param {object | string} data - The data to set.\n * @param {IStorageConfig} [config] - The session configuration.\n */\n set(id: string, data: object | string, config?: IStorageConfig): void {\n if (!this.isAvailable()) {\n return;\n }\n if (config?.expires) {\n if (typeof data === 'string') {\n data = { data, expiration: config.expires };\n } else {\n data = { ...data, expiration: config.expires };\n }\n }\n sessionStorage.setItem(id, JSON.stringify(data));\n }\n\n /**\n * Delete Delete the data from the session storage.\n *\n * @param {string} id - The id of the data to delete.\n */\n delete(id: string): void {\n sessionStorage.removeItem(id);\n }\n}\n","import Link from 'next/link';\n\n/**\n * IButtonPreview\n *\n * @interface IButtonPreview\n */\nexport interface IButtonPreview {\n /**\n * The optional text to display\n *\n * @memberof IButtonPreview\n * @default 'Exit Preview'\n * @member {string} [text]\n */\n text?: string;\n}\n\n/**\n * ButtonPreview A button to exit preview mode\n *\n * @param {IButtonPreview} props - The props for the ButtonPreview component\n * @returns {React.FC<IButtonPreview>} Component\n */\nconst ButtonPreview: React.FC<IButtonPreview> = ({\n text = 'Exit Preview',\n}: IButtonPreview) => {\n return (\n <Link\n href=\"/api/preview/clear\"\n prefetch={false}\n className=\"text-sm fixed right-10 z-50 bg-nextdoor-100 px-4 py-2 rounded-full font-bold\"\n data-testid=\"button-preview\"\n >\n {text}\n </Link>\n );\n};\n\nexport default ButtonPreview;\n","import Icon from '@/component-library/atoms/Icon/Icon';\nimport Paragraph from '@/component-library/atoms/Paragraph/Paragraph';\nimport { Disclosure } from '@headlessui/react';\n\n/**\n * IAccordionContent Interface for the Accordion Content Item\n *\n * @interface\n */\nexport interface IAccordionContentItem {\n /** The header of the Accordion Content Item */\n header: string;\n /** The content of the Accordion Content Item */\n content?: string | React.ReactNode;\n\n}\n\n/**\n * IAccordionContent Interface for the Accordion Content Component\n *\n * @interface\n */\nexport interface IAccordionContent {\n /** An array of AccordionContent objects containing a header and content */\n content: IAccordionContentItem[];\n}\n\n/**\n * Accordion Content Accordion molecule for displaying Accordion Content\n *\n * @param {IAccordionContent} props - The props for the Accordion Content\n * @returns {React.FC<IAccordionContent>} AccordionContent Component\n */\nconst AccordionContent: React.FC<IAccordionContent> = ({ content }) => {\n // Base Button Classes to apply to accordion buttons\n const baseButtonClass =\n 'text-body4 w-full h-full font-petco inline-flex gap-[8px] justify-between text-left font-bold focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus-400';\n\n return (\n <div\n data-testid=\"accordion-content\"\n className=\"border-b-solid border-b-[1px] border-b-neutral-300\"\n >\n {content.map((contentItem, index) => (\n <Disclosure\n as=\"div\"\n key={index}\n className=\"border-t-solid border-t-[1px] border-t-neutral-300\"\n >\n {({ open }) => (\n <>\n <Disclosure.Button\n data-testid={`accordion-content-disclosure-btn-${index}`}\n className={`${baseButtonClass} ${\n open ? 'pt-[16px] pb-[4px]' : 'py-[16px]'\n } `}\n >\n {contentItem.header}\n <Icon\n icon={open ? 'arrowUp' : 'arrowDown'}\n size={24}\n colorType=\"base\"\n colorShade={400}\n />\n </Disclosure.Button>\n <Disclosure.Panel\n data-testid={`accordion-content-disclosure-panel-${index}`}\n >\n <div className=\"pr-[32px] pb-[16px]\">\n {typeof contentItem.content === 'object' ? (\n <div className=\"text-body4\">\n {contentItem.content}\n </div>\n ) : (\n <Paragraph size=\"body4\">\n {contentItem.content}\n </Paragraph>\n )}\n </div>\n </Disclosure.Panel>\n </>\n )}\n </Disclosure>\n ))}\n </div>\n );\n};\n\nexport default AccordionContent;\n","import Heading from '@/component-library/atoms/Heading/Heading';\nimport Paragraph from '@/component-library/atoms/Paragraph/Paragraph';\nimport AccordionContent, {\n IAccordionContentItem,\n} from '@/component-library/molecules/AccordionContent/AccordionContent';\n\n/**\n * IAccordionFaq Interface for Accordion FAQ component\n *\n * @interface\n */\nexport interface IAccordionFaq {\n /** The title of the FAQ Accordion. */\n title: string;\n /** The subtitle of the FAQ Accordion. */\n subTitle: string;\n /** The content array of the FAQ accordion. */\n content: IAccordionContentItem[];\n /**\n * The classes to apply to the FAQ Accordion.\n *\n * @default ''\n */\n classes?: string;\n}\n\n/**\n * Accordion FAQ The Accordion FAQ displays a title, subtitle and the accordion\n * content\n *\n * @param {IAccordionFaq} props - The props for the Accordion FAQ component\n * @returns {React.FC<IAccordionFaq>} Accordion FAQ Component\n */\nconst AccordionFaq: React.FC<IAccordionFaq> = ({\n title,\n subTitle,\n content,\n classes = '',\n}) => {\n return (\n <div data-testid=\"accordion-faq\" className={classes}>\n <div className=\"sm:grid sm:grid-cols-6 md:block\">\n <Heading\n size=\"h2\"\n font=\"amasis\"\n className=\"col-start-2 col-span-4 text-center mb-[8px] md:mb-[16px]\"\n >\n {title}\n </Heading>\n <Paragraph\n size=\"body3\"\n className=\"col-start-2 col-span-4 text-center mb-[24px] md:mb-[36px]\"\n >\n {subTitle}\n </Paragraph>\n </div>\n <AccordionContent content={content} />\n </div>\n );\n};\n\nexport default AccordionFaq;\n","import { InferContentfulResponse } from '@/component-library-lib/dataSource/contentful/helpers';\nimport { Topics } from '@/component-library-lib/dataSource/contentful/models/topics';\nimport { anchorTarget } from '@/component-library-lib/utils/anchorTarget';\nimport AnimateItem from '@/component-library/atoms/AnimateItem/AnimateItem';\nimport AccordionFaq from '@/component-library/organisms/AccordionFaq/AccordionFaq';\nimport {\n documentToReactComponents,\n Options,\n} from '@contentful/rich-text-react-renderer';\nimport { BLOCKS, INLINES } from '@contentful/rich-text-types';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Render Options\n *\n * @constant\n */\nconst renderOptions: Options = {\n renderNode: {\n /**\n * Embedded Asset\n *\n * @param {object} _ - Node Data\n * @param {React.ReactNode} children - Node Children Tree\n * @returns {React.ReactNode} - ReactNode\n */\n [BLOCKS.PARAGRAPH]: (_, children) => (\n <p className=\"font-normal mb-2\">{children}</p>\n ),\n /**\n * List ul\n *\n * @param {object} _ - Node Data\n * @param {React.ReactNode} children - Node Children Tree\n * @returns {React.ReactNode} - ReactNode\n */\n [BLOCKS.UL_LIST]: (_, children) => <ul className=\"mb-4\">{children}</ul>,\n /**\n * @param {object} _ - Node Data\n * @param {React.ReactNode} children - Node Children Tree\n * @returns {React.ReactNode} - ReactNode\n */\n [BLOCKS.LIST_ITEM]: (_, children) => (\n <li className=\"list-disc ml-5 [&>p]:m-0\">{children}</li>\n ),\n /**\n * @param {object} node - Node Data\n * @param {object} node.data - Node Data\n * @param {React.ReactNode} children - Node Children Tree\n * @returns {React.ReactNode | void} - ReactNode\n */\n [INLINES.HYPERLINK]: ({ data }, children) => {\n return anchorTarget(data.uri, children);\n },\n },\n};\n\n/**\n * AccordionFaqContainerProps\n *\n * @typedef AccordionFaqContainerProps\n */\ntype AccordionFaqContainerProps = InferContentfulResponse<Topics['FAQ']> & {\n /** Classname */\n className?: string;\n};\n\n/**\n * @param {AccordionFaqContainerProps} props - AccordionFaqContainerProps\n * @returns {React.ReactNode} - AccordionFaqContainer\n */\nexport const AccordionFaqContainer = (props: AccordionFaqContainerProps) => {\n return (\n <AnimateItem from={{ translateY: 20 }}>\n <div className=\"px-6 sm:px-8 md:px-10 md:grid md:grid-cols-12 md:gap-6\">\n <AccordionFaq\n title={props.fields.headline}\n subTitle={props.fields.copy}\n content={\n props.fields?.rows && props.fields.rows.length > 0\n ? props.fields.rows.map((item) => ({\n header: item?.fields.headline || '',\n content: item?.fields.copyRichText\n ? documentToReactComponents(\n item.fields.copyRichText,\n renderOptions\n )\n : item?.fields.copy || '',\n }))\n : []\n }\n classes={twMerge('md:col-span-6 md:col-start-4', props.className)}\n />\n </div>\n </AnimateItem>\n );\n};\n","export default {\"src\":\"/lost/_next/static/media/load.ebf46949.svg\",\"height\":239,\"width\":240,\"blurWidth\":0,\"blurHeight\":0};","import loaderSVG from '@/component-library-images/load.svg';\nimport Icon, { IIcon } from '@/component-library/atoms/Icon/Icon';\nimport Image from 'next/legacy/image';\n\n/**\n * ILoadingSpinner - Interface for LoadingSpinner component\n *\n * @interface\n */\nexport interface ILoadingSpinner {\n /**\n * The optional classes for the component.\n *\n * @default ''\n */\n classes?: string;\n /**\n * The optional size of the spinner.\n *\n * @default 32\n */\n size?: number;\n /** The optional icon to be used in the spinner. */\n icon?: IIcon;\n}\n\n/**\n * Loading Spinner Spinning Loading SVG to be used when loading data.\n *\n * @param {ILoadingSpinner} props - The props for the LoadingSpinner component\n * @returns {React.FC<ILoadingSpinner>} Loading Spinner Component\n */\nconst LoadingSpinner: React.FC<ILoadingSpinner> = ({\n classes = '',\n size = 32,\n icon,\n}) => {\n return (\n <div data-testid=\"loading-spinner\" className={classes}>\n {icon ? (\n <Icon {...icon} classes=\"animate-spin-loader\" />\n ) : (\n <Image\n className=\"animate-spin-loader\"\n src={loaderSVG}\n alt=\"loading\"\n layout=\"fixed\"\n width={size}\n height={size}\n />\n )}\n </div>\n );\n};\n\nexport default LoadingSpinner;\n","import LoadingSpinner from '@/component-library/atoms/LoadingSpinner/LoadingSpinner';\nimport { cva } from 'cva';\nimport Link from 'next/link';\n\n/**\n * The valid sizes for the button.\n *\n * @typedef {'sm' | 'md' | 'lg'}\n */\ntype ButtonSize = 'sm' | 'md' | 'lg';\n\n/**\n * The valid colors for the button.\n *\n * @typedef {'primary' | 'secondary'}\n */\ntype ButtonColor = 'primary' | 'secondary';\n\n/**\n * The valid variants for the button.\n *\n * @typedef {'light' | 'dark' | 'destructive'}\n */\ntype Variant = 'light' | 'dark' | 'destructive';\n\n/**\n * IButton Interface for the Button component\n *\n * @interface\n */\nexport interface IButton extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** The size of the button. Can be 'sm', 'md', or 'lg'. */\n size: ButtonSize;\n /** The variant of the button. Can be 'light', 'dark', or 'destructive'. */\n variant: Variant;\n /** The color of the button. Can be 'primary' or 'secondary'. */\n color: ButtonColor;\n /**\n * The optional prop to make the button a full width component.\n *\n * @default false\n */\n fullWidth?: boolean;\n /**\n * The optional url to use button as a link\n *\n * @default ''\n */\n href?: string;\n /**\n * Optional prop to open to a new tab link\n *\n * @default false\n */\n newTab?: boolean;\n /**\n * The optional loading state of the button\n *\n * @default false\n */\n loading?: boolean;\n}\n\n/**\n * Button Base Font Properties This is the base font properties for the button.\n *\n * @constant\n */\nexport const buttonBaseFont =\n 'font-petco leading-[24px] text-[16px] rounded-full font-bold transition-colors duration-200 ease-in-out';\n\n/**\n * Button Size Map This map is used to map the size prop to the appropriate\n * tailwind classes.\n *\n * @constant\n */\nconst sizes = {\n sm: 'px-[24px] py-[6px]',\n md: 'px-[40px] py-[12px]',\n lg: 'px-[40px] py-[16px]',\n};\n\n/**\n * Button Loading Size Map This map is used to map the size prop to the\n * appropriate tailwind classes.\n *\n * @constant\n */\nconst loadingSizes = {\n sm: 'px-[8px] py-[6px]',\n md: 'px-[24px] py-[12px]',\n lg: 'px-[24px] py-[16px]',\n};\n\n/**\n * Button Classes The classes for the button component using CVA.\n *\n * @constant\n */\nconst buttonClasses = cva(\n `${buttonBaseFont} \n focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus-400`,\n {\n variants: {\n color: { primary: '', secondary: '' },\n variant: { light: '', dark: '', destructive: '' },\n state: {\n loading:\n 'flex flex-row items-center justify-center gap-x-[8px] cursor-not-allowed',\n disabled: 'cursor-not-allowed',\n },\n },\n compoundVariants: [\n {\n variant: 'light',\n color: 'primary',\n class: 'bg-base-400 hover:bg-base-500 text-neutral-100',\n },\n {\n variant: 'light',\n color: 'secondary',\n class:\n 'bg-transparent text-base-400 border-solid border-2 border-base-400 hover:bg-base-400 hover:text-neutral-100',\n },\n {\n variant: 'dark',\n color: 'primary',\n class: 'bg-neutral-100 hover:bg-base-100 text-base-400',\n },\n {\n variant: 'dark',\n color: 'secondary',\n class:\n 'bg-transparent text-neutral-100 border-solid border-2 border-neutral-100 hover:bg-neutral-100 hover:text-base-400',\n },\n\n {\n variant: 'destructive',\n color: 'primary',\n class: 'bg-error-200 hover:bg-error-300 text-neutral-100',\n },\n {\n variant: 'destructive',\n color: 'secondary',\n class:\n 'bg-transparent text-error-200 border-solid border-2 border-error-200 hover:bg-error-200 hover:text-neutral-100',\n },\n\n {\n state: 'disabled',\n color: 'primary',\n class:\n 'bg-neutral-300 text-neutral-200 hover:bg-neutral-300 hover:text-neutral-200',\n },\n {\n state: 'disabled',\n color: 'secondary',\n class:\n 'bg-transparent text-neutral-400 border-solid border-2 border-neutral-400 hover:bg-transparent hover:text-neutral-400',\n },\n ],\n }\n);\n\n/**\n * Function to get the size classes for the button based on the size prop and\n * its loading state.\n *\n * @param {ButtonSize} size - The size prop for the button\n * @param {boolean} loading - The loading state of the button\n * @returns {string} The size classes for the button\n */\nconst getSizeClasses = (size: ButtonSize, loading?: boolean): string => {\n if (loading) {\n return loadingSizes[size];\n }\n return sizes[size];\n};\n\n/**\n * Button - Component Used as a generic Button across the site. Allows for\n * different sizes, colors, and variants.\n *\n * @param {IButton} props - The props for the Button component\n * @returns {React.FC<IButton>} Button Component\n */\nconst Button: React.FC<IButton> = ({\n size,\n variant,\n color,\n disabled = false,\n fullWidth,\n children,\n href = '',\n newTab = false,\n loading = false,\n ...rest\n}: IButton) => {\n /**\n * The size classes for the button\n *\n * @constant\n */\n const sizeCls = getSizeClasses(size, loading);\n\n /**\n * The data test id\n *\n * @constant\n */\n const dataTestId = `button-${size}-${variant}-${color}-${disabled}${\n loading ? '-loading' : ''\n }`;\n const fullWidthClass = 'w-full';\n\n /**\n * The button state\n *\n * @constant\n */\n const buttonState = disabled && !loading ? 'disabled' : 'loading';\n\n /**\n * The button classes\n *\n * @constant\n */\n const buttonClass = `${sizeCls} ${buttonClasses(\n disabled || loading\n ? {\n color: color,\n variant: variant,\n state: buttonState,\n }\n : {\n color: color,\n variant: variant,\n }\n )} ${fullWidth ? fullWidthClass : ''}\n ${rest.className}`;\n\n return (\n <>\n {href && !disabled && !loading ? (\n <>\n {!newTab ? (\n <Link\n href={href}\n data-testid=\"button-link\"\n className={`${buttonClass} inline-block text-center`}\n >\n {children}\n </Link>\n ) : (\n <a\n href={href}\n target=\"_blank\"\n data-testid=\"button-link\"\n className={`${buttonClass} inline-block text-center`}\n rel=\"noreferrer\"\n >\n {children}\n </a>\n )}\n </>\n ) : (\n <button\n data-testid={dataTestId}\n {...rest}\n className={buttonClass}\n disabled={disabled}\n >\n {loading && (\n <LoadingSpinner\n size={24}\n classes=\"aspect-square w-[24px] h-[24px]\"\n />\n )}\n {children}\n </button>\n )}\n </>\n );\n};\n\nexport default Button;\n","import { InferContentfulResponse } from '@/component-library-lib/dataSource/contentful/helpers';\nimport { Topics } from '@/component-library-lib/dataSource/contentful/models/topics';\nimport AnimateItem from '@/component-library/atoms/AnimateItem/AnimateItem';\nimport Button from '@/component-library/atoms/Button/Button';\nimport { useOverlay } from '@/component-library-lib/hooks/overlayContext/OverlayContext';\n\n/**\n * ActionLinkContainer Props\n *\n * @typedef ActionLinkContainerProps\n */\ntype ActionLinkContainerProps = InferContentfulResponse<Topics['ActionLink']>;\n\n/**\n * @param {ActionLinkContainerProps} props - ActionLinkContainerProps\n * @returns {React.ReactNode} - ActionLinkContainer\n */\nexport const ActionLinkContainer = (props: ActionLinkContainerProps) => {\n const { updateShow } = useOverlay();\n\n return (\n <AnimateItem from={{ translateX: -20 }}>\n <div\n data-testid=\"action-link-container\"\n className=\"flex items-center justify-center\"\n >\n <Button\n color=\"primary\"\n variant=\"light\"\n size=\"lg\"\n href={props.fields.url}\n newTab={props.fields.target === '_blank'}\n aria-label={props.fields.label}\n onClick={() => {\n if (props.fields.overlay) {\n updateShow(true);\n }\n }}\n >\n {props.fields.label}\n </Button>\n </div>\n </AnimateItem>\n );\n};\n","import Image, { ImageLoader } from 'next/legacy/image';\nimport Link from 'next/link';\n\n/**\n * ICardArticle Interface for the Card Article Component\n *\n * @interface\n */\nexport interface ICardArticle {\n /** Title of the Article for the Card */\n title: string;\n /** The Excerpt of the Article to Display */\n excerpt: string;\n /** The Image of the Article to display */\n image: string;\n /**\n * The optional classes for the component\n *\n * @default ''\n */\n classes?: string;\n /** Url of the article to link to */\n url: string;\n /** The optional target for the url */\n target?: '_blank' | '_self' | '_parent' | '_top';\n /** The loader function for the image */\n loader?: ImageLoader;\n}\n\n/**\n * Card Article The Card Article Component that links to an url and displays an\n * image, title and excerpt\n *\n * @param {ICardArticle} props - The props for the Card Article Component\n * @returns {React.FC<ICardArticle>} Card Article Component\n */\nconst CardArticle: React.FC<ICardArticle> = ({\n title,\n excerpt,\n image,\n classes = '',\n url,\n target = '_self',\n loader,\n}: ICardArticle) => {\n return (\n <div\n data-testid=\"card-article\"\n className={`w-full h-[346px] sm:h-[268px] md:h-[436px] overflow-hidden group cursor-pointer [&:has(:focus-visible)]:ring-1 [&:has(:focus-visible)]:ring-focus-400 ${classes}`}\n >\n <Link\n href={url}\n className=\"group focus:ring-0 focus:ring-offset-0 focus-visible:ring-offset-0 focus-visible:ring-0 focus-visible:border-none focus-visible:outline-none\"\n target={target}\n >\n <div className=\"h-[218px] sm:h-[140px] md:h-[288px] relative rounded-[16px] sm:rounded-[20px] md:rounded-[24px] overflow-hidden\">\n <Image\n data-testid=\"card-article-image\"\n src={image}\n layout=\"fill\"\n alt={`Image of ${title}`}\n objectFit=\"cover\"\n className=\"scale-100 group-hover:scale-[102%] transition-transform duration-100\"\n loader={loader}\n />\n </div>\n <div className=\"w-full h-[124px] sm:h-[112px] md:h-[124px]\">\n <span className=\"mt-[16px] sm:mt-[16px] md:mt-[24px] font-bold font-petco text-h5 line-clamp-2 text-mkNavy-400\">\n {title}\n </span>\n <div className=\"sm:mt-[8px] md:mt-[8] lg:mt-[12] font-petco line-clamp-2\">\n {excerpt}\n </div>\n </div>\n </Link>\n </div>\n );\n};\n\nexport default CardArticle;\n","import Paragraph from '@/component-library/atoms/Paragraph/Paragraph';\nimport Image, { ImageLoader } from 'next/legacy/image';\nimport Link from 'next/link';\n\n/**\n * Aspect Ratios\n *\n * @type {aspectRatio} Aspect Ratios available for the Card Image\n */\nexport type aspectRatio = '4:3' | '1:1';\n\n/**\n * ICardImage Interface for the Card Image Component\n *\n * @interface\n */\nexport interface ICardImage {\n /** The text to display. */\n text: string;\n /** The image to display. */\n image: string;\n /** The alt text for the image. */\n alt: string;\n /** The href to link to. */\n href: string;\n /** The opacity of the image. */\n opacity?: number;\n /** The aspect ratio of the image. */\n aspectRatio: aspectRatio;\n /**\n * The optional classes to apply to the component\n *\n * @default ''\n */\n classes?: string;\n /** The loader function for the image */\n loader?: ImageLoader;\n}\n\n/**\n * Card Image The Image Card component is used to display an image with text\n *\n * @param {ICardImage} props - The props for the Card Image Component\n * @returns {React.FC<ICardImage>} Card Image Component\n */\nconst CardImage: React.FC<ICardImage> = ({\n text,\n image,\n href,\n alt,\n opacity = 0.7,\n aspectRatio,\n classes = '',\n loader,\n}: ICardImage) => {\n let aspectClass: string;\n switch (aspectRatio) {\n case '4:3':\n aspectClass = 'aspect-[4/3]';\n break;\n case '1:1':\n aspectClass = 'aspect-square';\n break;\n }\n return (\n <div\n data-testid=\"card-image\"\n className={`group max-w-2xl relative bg-black ${classes} ${aspectClass}`}\n >\n <Link href={href}>\n <Image\n src={image}\n alt={alt}\n style={{ opacity: opacity }}\n layout=\"fill\"\n objectFit=\"cover\"\n className=\"scale-100 group-hover:scale-[102%] transition-transform duration-100\"\n loader={loader}\n />\n <Paragraph className=\"absolute text-neutral-100 text-h4 top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\">\n {text}\n </Paragraph>\n </Link>\n </div>\n );\n};\n\nexport default CardImage;\n","import ContentfulImage from '@/component-library/atoms/ContentfulImage/ContentfulImage';\nimport Heading from '@/component-library/atoms/Heading/Heading';\nimport Paragraph from '@/component-library/atoms/Paragraph/Paragraph';\nimport React from 'react';\n\n/**\n * IInfoGraphicCard\n *\n * @interface\n */\nexport interface IInfoGraphicCard {\n /**\n * The image to display.\n *\n * @memberof IInfoGraphicCard\n * @member {string} image\n */\n image: string;\n /**\n * The title to display.\n *\n * @memberof IInfoGraphicCard\n * @member {string} title\n */\n title: string;\n /**\n * The description to display.\n *\n * @memberof IInfoGraphicCard\n * @member {string | React.ReactNode} [description]\n */\n description?: string | React.ReactNode;\n /**\n * The description to display RichText support.\n *\n * @memberof IInfoGraphicCard\n * @member {React.ReactNode} [descriptionRichText]\n */\n descriptionRichText?: React.ReactNode;\n /**\n * The optional classes to apply to the component.\n *\n * @memberof IInfoGraphicCard\n * @default ''\n * @member {string} [classes]\n */\n classes?: string;\n /**\n * Whether to use the CdnImage component or no loader.\n *\n * @memberof IInfoGraphicCard\n * @default false\n * @member {boolean} [noLoader]\n */\n noLoader?: boolean;\n}\n\n/**\n * InfoGraphicCard Displays an image, title and description. Description is\n * passed in as either a string or a React Node so things like text with links\n * can be passed in\n *\n * @param {IInfoGraphicCard} props - The props for the InfoGraphicCard component\n * @returns {React.FC<IInfoGraphicCard>} InfoGraphicCard Component\n */\nconst InfoGraphicCard: React.FC<IInfoGraphicCard> = ({\n image,\n title,\n description,\n descriptionRichText,\n classes = '',\n noLoader = false,\n}) => {\n return (\n <div\n data-testid=\"info-graphic-card\"\n className={`w-full px-6 mb:px-8 text-center info-graphic-card ${classes}`}\n >\n <div className=\"relative h-[114px] mb-6 md:mb-8\">\n {noLoader ? (\n <img\n src={image}\n className=\"absolute top-0 bottom-0 right-0 left-0 m-auto block object-scale-down\"\n loading=\"lazy\"\n alt={`${title} image`}\n />\n ) : (\n <ContentfulImage\n src={image}\n layout=\"fill\"\n objectFit=\"contain\"\n loading=\"lazy\"\n alt={`${title} image`}\n sizes=\"200px\"\n />\n )}\n </div>\n <Heading size=\"h5\" className=\"mb-4 text-secondaryBase-400\">\n {title}\n </Heading>\n\n {descriptionRichText ? (\n <>{descriptionRichText}</>\n ) : (\n description && (\n <Paragraph size=\"body4\" className=\"[&>a:hover]:text-base-300\">\n {description}\n </Paragraph>\n )\n )}\n </div>\n );\n};\n\nexport default InfoGraphicCard;\n","import contentFulImageLoader from '@/component-library-lib/loaders/contentfulImageLoader';\nimport { anchorTarget } from '@/component-library-lib/utils/anchorTarget';\nimport { addHttps } from '@/component-library-lib/utils/stringReplace/common';\nimport { renderBreakLine } from '@/component-library-lib/utils/stringReplace/renderBreakLine';\nimport CardArticle from '@/component-library/molecules/CardArticle/CardArticle';\nimport CardImage from '@/component-library/molecules/CardImage/CardImage';\nimport InfoGraphicCard from '@/component-library/molecules/InfoGraphicCard/InfoGraphicCard';\nimport {\n documentToReactComponents,\n Options,\n} from '@contentful/rich-text-react-renderer';\nimport { BLOCKS, INLINES } from '@contentful/rich-text-types';\nimport { InferContentfulResponse } from '@/component-library-lib/dataSource/contentful/helpers';\nimport { Topics } from '@/component-library-lib/dataSource/contentful/models/topics';\n\n/**\n * CardContainerProps\n *\n * @typedef CardContainerProps\n */\ntype CardContainerProps = InferContentfulResponse<Topics['Card']>;\n\n/**\n * Render Options\n *\n * @constant\n */\nconst renderOptions: Options = {\n renderNode: {\n /**\n * Embedded Asset\n *\n * @param {object} _ - Node Data\n * @param {React.ReactNode} children - Node Children Tree\n * @returns {React.ReactNode} - ReactNode\n */\n [BLOCKS.PARAGRAPH]: (_, children) => (\n <p className=\"text-body4 font-normal mb-4\">{children}</p>\n ),\n /**\n * @param {object} node - Node Data\n * @param {object} node.data - Node Data\n * @param {React.ReactNode} children - Node Children Tree\n * @returns {React.ReactNode | void} - ReactNode\n */\n [INLINES.HYPERLINK]: ({ data }, children) => {\n return anchorTarget(data.uri, children);\n },\n },\n renderText: renderBreakLine,\n};\n\n/**\n * @param {object} props - The props for the Card\n * @returns {React.ReactNode} - The Card Container\n */\nexport const CardContainer = (props: CardContainerProps) => {\n const { title, image, actionLink, componentStyle } = props.fields;\n\n const copy = props.fields.copy || '';\n const copyRichText = props.fields.copyRichText\n ? documentToReactComponents(props.fields.copyRichText, renderOptions)\n : undefined;\n const href = actionLink?.fields.url || '';\n\n switch (componentStyle) {\n case 'Card Article':\n return (\n <CardArticle\n title={title}\n excerpt={copy}\n image={addHttps(image?.fields?.file?.url)}\n url={actionLink?.fields.url || ''}\n loader={contentFulImageLoader}\n />\n );\n\n case 'Card Image':\n return (\n <CardImage\n alt={title}\n image={addHttps(image?.fields?.file?.url)}\n aspectRatio=\"1:1\"\n href={href}\n text={title}\n classes=\"rounded-2xl overflow-hidden [&_p]:font-semibold\"\n loader={contentFulImageLoader}\n />\n );\n\n case 'Info Graphic Card':\n return (\n <div className=\"[&_span.text-h5]:font-semibold [&>div]:px-0\">\n <InfoGraphicCard\n image={addHttps(image?.fields?.file?.url)}\n title={title}\n description={copy}\n descriptionRichText={copyRichText}\n />\n </div>\n );\n }\n};\n","import Heading from '@/component-library/atoms/Heading/Heading';\nimport Paragraph from '@/component-library/atoms/Paragraph/Paragraph';\n\n/**\n * IDisplayText Interface for the Display Text Component\n *\n * @interface\n */\nexport interface IDisplayText {\n /** The overline text to display. */\n overline?: string;\n /** The heading text to display. */\n heading?: React.ReactNode | string;\n /**\n * The optional classes to apply to the component.\n *\n * @default ''\n */\n classes?: string;\n}\n\n/**\n * Display Text Display Text - takes in overline, heading and classes\n *\n * @param {IDisplayText} props - The props for the Display Text Component\n * @returns {React.FC<IDisplayText>} Display Text Component\n */\nconst DisplayText: React.FC<IDisplayText> = ({\n overline,\n heading,\n classes = '',\n}) => {\n return (\n <div data-testid=\"display-text\" className={`text-center w-full ${classes}`}>\n {overline && (\n <Paragraph\n size=\"body3\"\n font=\"petco\"\n className=\"text-neutral-800 mb-[16px]\"\n >\n {overline}\n </Paragraph>\n )}\n {heading && (\n <Heading size=\"h2\" font=\"amasis\" className=\"text-neutral-800\">\n {heading}\n </Heading>\n )}\n </div>\n );\n};\n\nexport default DisplayText;\n","import { ReactNode } from 'react';\n\n/**\n * IPageWrapper\n *\n * @interface\n */\nexport interface IPageWrapper {\n /** The content of the page. */\n children: ReactNode;\n /**\n * The classes to apply to the component.\n *\n * @default ''\n */\n classes?: string;\n}\n\n/**\n * Page Wrapper Used to wrap the entire page in a fixed size container.\n *\n * @param {IPageWrapper} props - The props for the PageWrapper component\n * @returns {React.FC<IPageWrapper>} PageWrapper Component\n */\nconst PageWrapper: React.FC<IPageWrapper> = ({\n children,\n classes = '',\n}: IPageWrapper) => {\n return <div className={`max-w-[1440px] mx-auto ${classes}`}>{children}</div>;\n};\n\nexport default PageWrapper;\n","import { accentProps } from '@/component-library-lib/constants/accents';\nimport { useAccent } from '@/component-library-lib/hooks/accentContext/AccentContext';\nimport AnimateItem from '@/component-library/atoms/AnimateItem/AnimateItem';\nimport CdnImage from '@/component-library/atoms/CdnImage/CdnImage';\nimport DisplayText from '@/component-library/molecules/DisplayText/DisplayText';\nimport PageWrapper from '@/component-library/organisms/PageWrapper/PageWrapper';\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\nimport clsx from 'clsx';\nimport { twMerge } from 'tailwind-merge';\nimport { InferContentfulResponse } from '@/component-library-lib/dataSource/contentful/helpers';\nimport { Topics } from '@/component-library-lib/dataSource/contentful/models/topics';\n\n/**\n * DisplayTextContainerProps\n *\n * @typedef DisplayTextContainerProps\n */\ntype DisplayTextContainerProps = InferContentfulResponse<\n Topics['DisplayText']\n> & {\n /** Classname */\n className?: string;\n};\n\n/**\n * @param {DisplayTextContainerProps} props - DisplayTextContainerProps\n * @returns {React.ReactNode} - DisplayTextContainer\n */\nexport const DisplayTextContainer = (props: DisplayTextContainerProps) => {\n const { accent } = useAccent();\n const widthClass = (() => {\n const map: Record<'Full' | 'Wide' | 'Thin', string> = {\n Full: 'w-full',\n Wide: 'max-w-[446px] md:max-w-[896px]',\n Thin: 'max-w-[446px] md:max-w-[664px]',\n };\n\n return props.fields.width ? map[props.fields.width] : '';\n })();\n\n return (\n <PageWrapper classes=\"page-max-w\">\n <AnimateItem from={{ translateY: 20 }} duration={0.65}>\n <div\n className={twMerge(\n clsx(\n 'mx-auto flex flex-col items-center',\n widthClass,\n props.className\n )\n )}\n >\n <DisplayText\n heading={documentToReactComponents(props.fields.headline, {\n renderMark: {\n /**\n * Bold\n *\n * @param {string} text - The text to be bolded\n * @returns {React.ReactElement} Component\n */\n bold: (text) => (\n <strong className=\"text-mkPurple-400 font-petco\">\n {text}\n </strong>\n ),\n },\n })}\n overline={props.fields.overline}\n />\n {accent === accentProps.ADOPT && (\n <AnimateItem\n className=\"mt-4 sm:mt-6 md:mt-4\"\n from={{ translateY: -20 }}\n delay={0.4}\n >\n <CdnImage\n alt=\"\"\n src=\"/assets/org/display-text-underline-adopt.svg\"\n width={84}\n height={16}\n />\n </AnimateItem>\n )}\n </div>\n </AnimateItem>\n </PageWrapper>\n );\n};\n","import { ColorShade, ColorType } from '@/component-library/atoms/Colors/Colors';\nimport Icon, { IconType } from '@/component-library/atoms/Icon/Icon';\nimport { cva } from 'cva';\nimport { useState } from 'react';\n\n/**\n * Carousel Button Classes The classes for the carousel components using CVA.\n *\n * @constant\n */\nconst carouselButtonClasses = cva('rounded-full bg-neutral-200 p-[12px]', {\n variants: {\n state: {\n active: 'hover:drop-shadow-[0_4px_4px_rgba(0,0,0,0.15)]',\n disabled: 'cursor-not-allowed',\n },\n },\n});\n\n/**\n * ICarouselButton Interface for the Carousel Button Component\n *\n * @interface\n */\nexport interface ICarouselButton\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** The icon to display. */\n icon: IconType;\n /** If the button is disabled. */\n disabled?: boolean;\n}\n\n/**\n * Carousel Button Carousel Button Component to be used in the Carousel\n * Component\n *\n * @param {ICarouselButton} props - The props for the Carousel Button Component.\n * @returns {React.FC<ICarouselButton>} Carousel Button Component\n */\nconst CarouselButton: React.FC<ICarouselButton> = ({\n icon,\n disabled,\n ...rest\n}) => {\n const [hovered, setHovered] = useState(false);\n let iconColorShade: ColorShade = 300;\n let iconColorType: ColorType = 'base';\n\n if (disabled) {\n iconColorShade = 400;\n iconColorType = 'neutral';\n } else if (hovered) {\n iconColorShade = 400;\n } else {\n iconColorShade = 300;\n iconColorType = 'base';\n }\n\n return (\n <button\n {...rest}\n disabled={disabled}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n data-testid=\"carousel-button\"\n className={carouselButtonClasses({\n state: disabled ? 'disabled' : 'active',\n class: rest.className,\n })}\n >\n <Icon\n icon={icon}\n size={24}\n colorShade={iconColorShade}\n colorType={iconColorType}\n />\n </button>\n );\n};\n\nexport default CarouselButton;\n","import { addHttps } from '@/component-library-lib/utils/stringReplace/common';\nimport AnimateItem from '@/component-library/atoms/AnimateItem/AnimateItem';\nimport ContentfulImage from '@/component-library/atoms/ContentfulImage/ContentfulImage';\nimport CarouselButton from '@/component-library/molecules/CarouselButton/CarouselButton';\nimport Quote from '@/component-library/molecules/Quote/Quote';\nimport Link from 'next/link';\nimport { useState } from 'react';\nimport { InferContentfulResponse } from '@/component-library-lib/dataSource/contentful/helpers';\nimport { Topics } from '@/component-library-lib/dataSource/contentful/models/topics';\n\n/**\n * ElementSliderContainerProps\n *\n * @typedef ElementSliderContainerProps\n */\ntype ElementSliderContainerProps = InferContentfulResponse<\n Topics['ElementSlider']\n>;\n\n/**\n * @param {ElementSliderContainerProps} props - ContainerProps\n * @returns {React.ReactNode} - Container\n */\nexport const ElementSliderContainer = (props: ElementSliderContainerProps) => {\n const [activeIndex, setActiveIndex] = useState(0);\n const [slideDirection, setSlideDirection] = useState('right');\n\n const element = props.fields.elements[activeIndex];\n\n const url = element?.fields?.url;\n\n return (\n <div\n data-testid=\"element-slider-container\"\n className=\"grid grid-cols-1 sm:grid-cols-2 gap-6 md:gap-8 items-center sm:min-h-[560px] py-12 md:py-20\"\n >\n {element && (\n <AnimateItem\n key={element?.sys.id}\n from={{\n opacity: 0.5,\n translateX: slideDirection === 'left' ? -100 : 100,\n }}\n delay={0.2}\n className=\"w-full\"\n >\n <ContentfulImage\n src={addHttps(element.fields.image?.fields?.file?.url)}\n alt={element.fields.image?.fields?.title || 'Image'}\n layout=\"responsive\"\n width={644}\n height={498}\n objectFit=\"cover\"\n className=\"rounded-3xl overflow-hidden\"\n />\n </AnimateItem>\n )}\n <div className=\"h-full flex flex-col items-center justify-center relative\">\n <div>\n {element && (\n <div data-testid={`element-${element?.sys.id}`}>\n <AnimateItem\n key={element?.sys.id}\n from={{\n opacity: 0,\n translateX: slideDirection === 'left' ? -100 : 100,\n }}\n delay={0.2}\n className=\"text-center max-w-[568px] mx-auto [&_h2]:line-clamp-none [&_h2]:text-2xl [&_h2]:font-petco [&_h2]:font-semibold [&_h2]:text-base-400 [&_svg]:w-20 [&_svg]:h-20 [&_path]:fill-mkPink-400\"\n >\n <Quote key={element?.sys.id} text={element.fields.quote} />\n <p className=\"text-xl font-amasis mt-6\">\n {url ? (\n <Link\n href={url}\n className=\"underline underline-offset-4 decoration-from-font hover:text-base-400 decoration-[inherit]\"\n >\n {element.fields.author}\n </Link>\n ) : (\n element.fields.author\n )}\n </p>\n </AnimateItem>\n </div>\n )}\n </div>\n <div className=\"mt-[70px] flex gap-6 sm:absolute sm:bottom-0\">\n <CarouselButton\n icon=\"arrowLeft\"\n onClick={() => {\n activeIndex === 0\n ? setActiveIndex(props.fields.elements.length - 1)\n : setActiveIndex(activeIndex - 1);\n setSlideDirection('left');\n }}\n />\n <CarouselButton\n icon=\"arrowRight\"\n onClick={() => {\n activeIndex === props.fields.elements.length - 1\n ? setActiveIndex(0)\n : setActiveIndex(activeIndex + 1);\n setSlideDirection('right');\n }}\n />\n </div>\n </div>\n </div>\n );\n};\n","import { accentProps } from '@/component-library-lib/constants/accents';\nimport { useAccent } from '@/component-library-lib/hooks/accentContext/AccentContext';\nimport ContentfulImage from '@/component-library/atoms/ContentfulImage/ContentfulImage';\nimport Heading from '@/component-library/atoms/Heading/Heading';\nimport Paragraph from '@/component-library/atoms/Paragraph/Paragraph';\nimport clsx from 'clsx';\nimport Link from 'next/link';\nimport { HTMLAttributeAnchorTarget } from 'react';\n\n/**\n * IFeatureCard Interface for the Feature Card Component\n *\n * @interface IFeatureCard\n */\nexport interface IFeatureCard {\n /**\n * The Category of the Feature Card\n *\n * @memberof IFeatureCard\n * @member {string} category\n */\n category: string;\n /**\n * Title of the Feature Card\n *\n * @memberof IFeatureCard\n * @member {string} title\n */\n title: string;\n /**\n * The Copy of the Feature Card\n *\n * @memberof IFeatureCard\n * @member {string} copy\n */\n copy: string;\n /**\n * The label of the Feature Card\n *\n * @memberof IFeatureCard\n * @member {string} label\n */\n label: string;\n /**\n * The Image of the Feature Card\n *\n * @memberof IFeatureCard\n * @member {string} image\n */\n image: string;\n /**\n * The optional classes for the component\n *\n * @memberof IFeatureCard\n * @default ''\n * @member {string} [classes]\n */\n classes?: string;\n /**\n * Url of the Feature Card\n *\n * @memberof IFeatureCard\n * @member {string} url\n */\n url: string;\n /**\n * The optional target of the Card\n *\n * @memberof IFeatureCard\n * @default '_blank'\n * @member {HTMLAttributeAnchorTarget} [target]\n */\n target?: HTMLAttributeAnchorTarget;\n}\n\n/**\n * Feature Card\n *\n * @param {IFeatureCard} props - The props for the Feature Card Component\n * @returns {React.FC<IFeatureCard>} Feature Card Component\n */\nconst FeatureCard: React.FC<IFeatureCard> = ({\n category,\n title,\n copy,\n label,\n image,\n url,\n target = '_blank',\n classes = '',\n}: IFeatureCard) => {\n const { accent } = useAccent();\n\n return (\n <div data-testid=\"feature-card\" className={classes}>\n <Link href={url} className=\"group\" target={target}>\n {image && (\n <div className=\"aspect-square relative rounded-[20px] overflow-hidden mb-6\">\n <ContentfulImage\n data-testid=\"feature-card-image\"\n src={image}\n layout=\"fill\"\n alt={`Image of ${title}`}\n objectFit=\"cover\"\n className=\"scale-100 aspect-square group-hover:scale-[102%] transition-transform duration-100\"\n />\n </div>\n )}\n <div className=\"w-full\">\n <Paragraph size=\"body5\" className=\"mb-2 text-neutral-700\">\n {category}\n </Paragraph>\n\n <Heading\n size=\"h3\"\n font=\"petco\"\n className=\"text-mkNavy-400 mb-4 md:mb-6\"\n >\n {title}\n </Heading>\n\n <Paragraph\n size=\"body3\"\n font={accent === accentProps.ORG ? 'amasis' : 'petco'}\n >\n {copy}\n </Paragraph>\n\n <span\n className={clsx(\n 'p-5 font-medium underline underline-offset-[10px] decoration-[3px]',\n {\n 'decoration-base-300': accent === accentProps.ORG,\n 'decoration-mkPink-400 group-hover:decoration-mkNavy-400':\n accent === accentProps.ADOPT,\n 'decoration-mkLightBlue-400 group-hover:decoration-mkNavy-400':\n accent === accentProps.CARE,\n }\n )}\n >\n <p\n className={clsx('transition-colors font-bold text-mkNavy-400', {\n 'group-hover:text-base-300': accent === accentProps.ORG,\n 'group-hover:text-mkNavy-400':\n accent === accentProps.ADOPT || accent === accentProps.CARE,\n })}\n >\n {label}\n </p>\n </span>\n </div>\n </Link>\n </div>\n );\n};\n\nexport default FeatureCard;\n","import { InferContentfulResponse } from '@/component-library-lib/dataSource/contentful/helpers';\nimport { Topics } from '@/component-library-lib/dataSource/contentful/models/topics';\nimport { addHttps } from '@/component-library-lib/utils/stringReplace/common';\nimport FeatureCard from '@/component-library/molecules/FeatureCard/FeatureCard';\n\n/**\n * FeatureCardContainerProps\n *\n * @typedef FeatureCardContainerProps\n */\ntype FeatureCardContainerProps = InferContentfulResponse<Topics['FeatureCard']>;\n\n/**\n * @param {FeatureCardContainerProps} props - FeatureCardContainerProps\n * @returns {React.ReactNode} - FeatureCardContainer\n */\nexport const FeatureCardContainer = (props: FeatureCardContainerProps) => (\n <FeatureCard\n category={props.fields.overline}\n title={props.fields.headline}\n copy={props.fields.copy}\n image={addHttps(props.fields.image?.fields.file?.url)}\n url={props.fields.actionLink?.fields.url || ''}\n label={props.fields.actionLink?.fields.label || ''}\n target={props.fields.actionLink?.fields.target}\n />\n);\n","import { accentProps } from '@/component-library-lib/constants/accents';\nimport { useAccent } from '@/component-library-lib/hooks/accentContext/AccentContext';\nimport Heading from '@/component-library/atoms/Heading/Heading';\nimport Paragraph from '@/component-library/atoms/Paragraph/Paragraph';\nimport clsx from 'clsx';\nimport Link from 'next/link';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * IFlexibleCard Interface for the Flexible Card Component\n *\n * @interface IFlexibleCard\n */\nexport interface IFlexibleCard {\n /**\n * The Category of the Flexible Card\n *\n * @memberof IFlexibleCard\n * @member {string} [category]\n */\n category?: string;\n /**\n * Title of the Flexible Card\n *\n * @memberof IFlexibleCard\n * @member {string} title\n */\n title: string;\n /**\n * The Copy of the Flexible Card\n *\n * @memberof IFlexibleCard\n * @member {React.ReactNode | string} [copy]\n */\n copy?: React.ReactNode | string;\n /**\n * The label of the Flexible Card\n *\n * @memberof IFlexibleCard\n * @member {string} [label]\n */\n label?: string;\n /**\n * The optional classes for the component\n *\n * @memberof IFlexibleCard\n * @default ''\n * @member {string} [className]\n */\n className?: string;\n /**\n * Url of the Flexible Card\n *\n * @memberof IFlexibleCard\n * @member {string} url\n */\n url: string;\n /**\n * The optional variant for the component.\n *\n * The normal style for the component will display a headline color:\n * text-mkNavy-400, and a box shadow that has better visibility with Gray\n * backgrounds The variant style for the component will display a headline\n * color: text-base-400, and a box shadow that has better visibility with\n * light backgrounds\n *\n * @memberof IFlexibleCard\n * @default false\n * @member {boolean} [useVariant]\n */\n useVariant?: boolean;\n}\n\n/**\n * Flexible Card\n *\n * @param {IFlexibleCard} props - The props for the Flexible Card Component\n * @returns {React.FC<IFlexibleCard>} Flexible Card Component\n */\nconst FlexibleCard: React.FC<IFlexibleCard> = ({\n category,\n title,\n copy,\n label,\n className = '',\n url,\n useVariant = false,\n}: IFlexibleCard) => {\n const { accent } = useAccent();\n\n return (\n <div\n data-testid=\"flexible-card\"\n className={twMerge(clsx('mb-6 sm:mb-0 h-full w-full', className))}\n >\n <div\n className={clsx(\n 'bg-neutral-100 flex flex-col items-start justify-between rounded-3xl p-6 w-full h-full min-h-[180px]',\n useVariant ? 'shadow-cardVariant' : 'shadow-card'\n )}\n >\n <div className=\"w-full mb-3 flex flex-col items-start\">\n <Paragraph size=\"overline\" className=\"mb-1 text-neutral-700\">\n {category}\n </Paragraph>\n\n <Heading\n size=\"h5\"\n font=\"petco\"\n className={clsx(\n 'mb-4 md:mb-3',\n useVariant ? 'text-base-400' : 'text-mkNavy-400'\n )}\n >\n {title}\n </Heading>\n\n <div className=\"text-left [&>*]:text-base [&>*]:text-neutral-800 rich-text-with-links\">\n {copy}\n </div>\n </div>\n {url && (\n <Link href={url} target=\"_blank\" className=\"group\">\n <div\n className={clsx(\n 'font-medium underline underline-offset-[10px] decoration-[3px] pb-2',\n {\n 'decoration-base-300': accent === accentProps.ORG,\n 'decoration-mkPink-400 group-hover:decoration-mkNavy-400':\n accent === accentProps.ADOPT,\n 'decoration-mkLightBlue-400 group-hover:decoration-mkNavy-400':\n accent === accentProps.CARE,\n }\n )}\n >\n <p\n className={clsx('transition-colors font-bold text-mkNavy-400', {\n 'group-hover:text-base-300': accent === accentProps.ORG,\n 'group-hover:text-mkNavy-400':\n accent === accentProps.ADOPT || accent === accentProps.CARE,\n })}\n >\n {label}\n </p>\n </div>\n </Link>\n )}\n </div>\n </div>\n );\n};\n\nexport default FlexibleCard;\n","import Paragraph from '@/component-library/atoms/Paragraph/Paragraph';\nimport FlexibleCard from '@/component-library/molecules/FlexibleCard/FlexibleCard';\nimport {\n Options,\n documentToReactComponents,\n} from '@contentful/rich-text-react-renderer';\nimport { BLOCKS } from '@contentful/rich-text-types';\nimport React from 'react';\nimport { InferContentfulResponse } from '@/component-library-lib/dataSource/contentful/helpers';\nimport { Topics } from '@/component-library-lib/dataSource/contentful/models/topics';\n\n/**\n * FlexibleCardContainerProps\n *\n * @typedef FlexibleCardContainerProps\n */\ntype FlexibleCardContainerProps = InferContentfulResponse<\n Topics['FlexibleCard']\n> & {\n /** The optional classes for the component */\n className?: string;\n};\n\n/**\n * Render Options\n *\n * @constant\n */\nconst options: Options = {\n renderNode: {\n /**\n * @param {object} _ - The node\n * @param {string} children - The children\n * @returns {React.ReactNode} - Paragraph Component\n */\n [BLOCKS.PARAGRAPH]: (_, children: React.ReactNode) => (\n <Paragraph size=\"body4\" className=\"mb-4\">\n {children}\n </Paragraph>\n ),\n },\n renderMark: {\n /**\n * @param {string} text - The text to render\n * @returns {React.ReactNode} - The bold text\n */\n bold: (text) => <span className=\"font-bold\">{text}</span>,\n\n /**\n * @param {string} text - The text to render\n * @returns {React.ReactNode} - The italicized text\n */\n italic: (text) => <span className=\"font-light italic\">{text}</span>,\n },\n};\n\n/**\n * @param {FlexibleCardContainerProps} props - The props for the Flexible Card\n * @returns {React.ReactNode} - The Flexible Card Container\n */\nexport const FlexibleCardContainer = (props: FlexibleCardContainerProps) => {\n return (\n <FlexibleCard\n category={props.fields.overline}\n title={props.fields.headline}\n copy={documentToReactComponents(props.fields.body, options)}\n url={props.fields.actionLink?.fields.url || ''}\n label={props.fields.actionLink?.fields.label}\n useVariant={props?.fields.useVariant}\n className={props.className}\n />\n );\n};\n","import AnimateItem from '@/component-library/atoms/AnimateItem/AnimateItem';\nimport Button from '@/component-library/atoms/Button/Button';\nimport ContentfulImage from '@/component-library/atoms/ContentfulImage/ContentfulImage';\nimport Heading from '@/component-library/atoms/Heading/Heading';\nimport clsx from 'clsx';\nimport React from 'react';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Represents a Hero button component.\n *\n * @interface\n */\nexport interface IFullWidthCalloutBgColorButton {\n /** The label to display on the button. */\n label: string;\n /** The URL that the button should navigate to. */\n url: string;\n /** The target window or frame that the linked document will open in. */\n target: '_blank' | '_self' | '_parent' | '_top';\n /** The alternate text to display when the image cannot be displayed. */\n altTitle: string;\n}\n\n/**\n * IFullWidthCalloutBgColorImage The Image component\n *\n * @interface\n */\nexport interface IFullWidthCalloutBgColorImage {\n /** The URL of the image to display. */\n url: string;\n /** The width of the image. */\n width: number;\n /** The height of the image. */\n height: number;\n /** The alt text to display. */\n altTitle?: string;\n}\n\n/**\n * IFullWidthCallout Interface for Full Width Callout component\n *\n * @interface\n */\nexport interface IFullWidthCalloutBackgroundColor {\n /** The headline text to display. */\n headline?: React.ReactNode | string;\n /** The rich content text to display. */\n richCopy: React.ReactNode | string;\n /** The background color */\n backgroundColor: string;\n /** The first button to display. */\n button1?: IFullWidthCalloutBgColorButton;\n /** The second button to display. */\n button2?: IFullWidthCalloutBgColorButton;\n /** The image. */\n image?: IFullWidthCalloutBgColorImage;\n /**\n * The optional classes\n *\n * @default ''\n */\n className?: string;\n}\n\n/**\n * Full Width Callout Full width callout image component. Takes in overline,\n * headline, content and buttons\n *\n * @param {IFullWidthCalloutBackgroundColor} props - The props of the Full Width\n * Callout\n * @returns {React.FC<IFullWidthCalloutBackgroundColor>} Full Width Callout\n * Component\n */\nconst FullWidthCalloutBackgroundColor: React.FC<\n IFullWidthCalloutBackgroundColor\n> = ({\n headline,\n richCopy,\n backgroundColor,\n button1,\n button2,\n image,\n className = '',\n}) => {\n return (\n <div\n className={twMerge(\n 'w-full py-12',\n className,\n image && image.url ? 'sm:py-16 md:py-20' : 'sm:py-12 md:py-[72px]'\n )}\n style={{\n backgroundColor,\n }}\n data-testid=\"full-width-callout-background-color\"\n >\n <div className=\"page-max-w grid gap-x-4 gap-y-8 grid-cols-4 sm:grid-cols-6 md:grid-cols-12\">\n <div className=\"col-span-2 col-start-2 sm:col-span-2 sm:col-start-3 md:col-span-2 md:col-start-6\">\n {image && image.url && (\n <AnimateItem>\n <ContentfulImage\n src={image.url}\n alt={image.altTitle || 'Image'}\n width={image.width}\n height={image.height}\n className=\"w-full\"\n />\n </AnimateItem>\n )}\n </div>\n <div className=\"col-span-4 sm:col-span-6 md:col-span-8 md:col-start-3\">\n {headline && (\n <AnimateItem from={{ translateY: 20 }}>\n <Heading\n size={image && image.url ? 'h3' : 'h2'}\n font=\"petco\"\n className=\"text-center text-mkNavy-400 font-bold mb-4 [&>*]:text-mkNavy-400\"\n >\n {headline}\n </Heading>\n </AnimateItem>\n )}\n <AnimateItem from={{ translateY: 20 }}>\n {richCopy && <div>{richCopy}</div>}\n </AnimateItem>\n {(button1 || button2) && (\n <div\n data-testid=\"hero-buttons\"\n className=\"flex w-full flex-col mt-8 sm:flex-row items-center justify-center sm:space-x-4 space-y-4 sm:space-y-0\"\n >\n {button1 && (\n <AnimateItem\n from={{ translateY: 20 }}\n className={clsx(\n button1 && button2 ? 'w-full sm:w-auto' : 'w-auto'\n )}\n >\n <Button\n data-testid=\"hero-button-1\"\n size=\"md\"\n type=\"button\"\n href={button1.url}\n variant=\"light\"\n color=\"primary\"\n className=\"w-full\"\n >\n {button1.label}\n </Button>\n </AnimateItem>\n )}\n {button2 && (\n <AnimateItem\n from={{ translateY: 20 }}\n delay={0.4}\n className={clsx(\n button1 && button2 ? 'w-full sm:w-auto' : 'w-auto'\n )}\n >\n <Button\n data-testid=\"hero-button-2\"\n size=\"md\"\n type=\"button\"\n href={button2.url}\n variant=\"light\"\n color=\"secondary\"\n className=\"w-full\"\n >\n {button2.label}\n </Button>\n </AnimateItem>\n )}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default FullWidthCalloutBackgroundColor;\n","import { anchorTarget } from '@/component-library-lib/utils/anchorTarget';\nimport { addHttps } from '@/component-library-lib/utils/stringReplace/common';\nimport { renderBreakLine } from '@/component-library-lib/utils/stringReplace/renderBreakLine';\nimport Paragraph from '@/component-library/atoms/Paragraph/Paragraph';\nimport FullWidthCalloutBackgroundColor from '@/component-library/organisms/FullWidthCalloutBackgroundColor/FullWidthCalloutBackgroundColor';\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\nimport { BLOCKS, INLINES } from '@contentful/rich-text-types';\nimport { InferContentfulResponse } from '@/component-library-lib/dataSource/contentful/helpers';\nimport { Topics } from '@/component-library-lib/dataSource/contentful/models/topics';\n\n/**\n * FullWidthCalloutBackgroundColorContainerProps\n *\n * @typedef FullWidthCalloutBackgroundColorContainerProps\n */\ntype FullWidthCalloutBackgroundColorContainerProps = InferContentfulResponse<\n Topics['FullWidthCalloutBackgroundColor']\n> & {\n /** Classname */\n className?: string;\n};\n\n/**\n * @param {FullWidthCalloutBackgroundColorContainerProps} props -\n * FullWidthCalloutBackgroundColorContainerProps\n * @returns {React.ReactNode} - FullWidthCalloutBackgroundColorContainer\n */\nexport const FullWidthCalloutBackgroundColorContainer = (\n props: FullWidthCalloutBackgroundColorContainerProps\n) => {\n return (\n <FullWidthCalloutBackgroundColor\n className={props.className}\n headline={documentToReactComponents(props.fields.headline, {\n renderMark: {\n /**\n * Bold\n *\n * @param {string} text - The text to be bolded\n * @returns {React.ReactElement} Component\n */\n bold: (text) => (\n <span className=\"font-bold text-mkNavy-400\">{text}</span>\n ),\n /**\n * Italic\n *\n * @param {string} text - The text to be italicized\n * @returns {React.ReactElement} Component\n */\n italic: (text) => (\n <span className=\"font-light font-amasis italic text-mkNavy-400\">\n {text}\n </span>\n ),\n },\n })}\n richCopy={documentToReactComponents(props.fields.richCopy, {\n renderNode: {\n /**\n * @param {object} _ - Node Data\n * @param {React.ReactNode} children - Node Children Tree\n * @returns {React.ReactNode} - ReactNode\n */\n [BLOCKS.PARAGRAPH]: (_, children) => (\n <Paragraph\n size=\"body3\"\n font=\"petco\"\n className=\"text-center text-neutral-800 mb-6 lg:mb-10\"\n >\n {children}\n </Paragraph>\n ),\n /**\n * @param {object} node - Node Data\n * @param {object} node.data - Node Data\n * @param {React.ReactNode} children - Node Children Tree\n * @returns {React.ReactNode | void} - ReactNode\n */\n [INLINES.HYPERLINK]: ({ data }, children) => {\n return anchorTarget(data.uri, children);\n },\n },\n renderText: renderBreakLine,\n })}\n backgroundColor={props.fields.backgroundColor}\n image={{\n url: addHttps(props.fields.image?.fields.file?.url),\n width: props.fields.image?.fields.file?.details?.image?.width ?? 0,\n height: props.fields.image?.fields.file?.details?.image?.height ?? 0,\n altTitle: props.fields.image?.fields.title,\n }}\n button1={props.fields.actionLink1?.fields}\n button2={props.fields.actionLink2?.fields}\n />\n );\n};\n","import Button from '@/component-library/atoms/Button/Button';\nimport ContentfulImage from '@/component-library/atoms/ContentfulImage/ContentfulImage';\nimport Heading from '@/component-library/atoms/Heading/Heading';\nimport Paragraph from '@/component-library/atoms/Paragraph/Paragraph';\nimport clsx from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Represents a Hero button component.\n *\n * @interface IHeroButton\n */\nexport interface IHeroButton {\n /**\n * The label to display on the button.\n *\n * @memberof IHeroButton\n * @member {string} label\n */\n label: string;\n /**\n * The URL that the button should navigate to.\n *\n * @memberof IHeroButton\n * @member {string} url\n */\n url: string;\n /**\n * The target window or frame that the linked document will open in.\n *\n * @memberof IHeroButton\n * @member {'_blank' | '_self' | '_parent' | '_top'} target\n */\n target: '_blank' | '_self' | '_parent' | '_top';\n /**\n * The alternate text to display when the image cannot be displayed.\n *\n * @memberof IHeroButton\n * @member {string} altTitle\n */\n altTitle: string;\n}\n\n/**\n * IHeroImage The Hero Image component\n *\n * @interface IHeroImage\n */\nexport interface IHeroImage {\n /**\n * The URL of the image to display.\n *\n * @memberof IHeroImage\n * @member {string} url\n */\n url: string;\n /**\n * The alt text to display.\n *\n * @memberof IHeroImage\n * @member {string} [altTitle]\n */\n altTitle?: string;\n}\n\n/**\n * IHero\n *\n * @interface IHero\n */\nexport interface IHero {\n /**\n * The headline to display.\n *\n * @memberof IHero\n * @member {string} headline\n */\n headline: string;\n /**\n * The rich headline to display.\n *\n * @memberof IHero\n * @member {React.ReactNode} [richHeadline]\n */\n richHeadline?: React.ReactNode;\n /**\n * The copy text to display below the headline.\n *\n * @memberof IHero\n * @member {string} [copy]\n */\n copy?: string;\n /**\n * The Background image to display.\n *\n * @memberof IHero\n * @member {IHeroImage} bgImage\n */\n bgImage: IHeroImage;\n /**\n * Color scheme for the hero\n *\n * @memberof IHero\n * @member {'base 100' | 'base 200' | 'base 300' | 'base 400'} color\n */\n color: 'base 100' | 'base 200' | 'base 300' | 'base 400';\n /**\n * Whether to use a variant for the hero\n *\n * @memberof IHero\n * @member {boolean} useVariant\n */\n useVariant: boolean;\n /**\n * The optional first button to display.\n *\n * @memberof IHero\n * @member {IHeroButton} [button1]\n */\n button1?: IHeroButton;\n /**\n * The optional second button to display.\n *\n * @memberof IHero\n * @member {IHeroButton} [button2]\n */\n button2?: IHeroButton;\n /**\n * The optional className.\n *\n * @memberof IHero\n * @member {string} [className]\n */\n className?: string;\n /**\n * The optional wave border color\n *\n * @memberof IHero\n * @member {'base 200' | 'base 300' | 'light green 400' | 'pink 400'} [waveBorderColor]\n */\n waveBorderColor?: 'base 200' | 'base 300' | 'light green 400' | 'pink 400';\n /**\n * The children to display.\n *\n * @memberof IHero\n * @member {React.ReactNode} [children]\n */\n children?: React.ReactNode;\n}\n\n/** Background colors */\nconst bgColors = {\n 'base 100': 'bg-base-100',\n 'base 200': 'bg-base-200',\n 'base 300': 'bg-base-300',\n 'base 400': 'bg-base-400',\n};\n\nconst waveBorders = {\n 'base 200': 'hero-wave-border-base-200',\n 'base 300': 'hero-wave-border-base-300',\n 'light green 400': 'hero-wave-border-light-green-400',\n 'pink 400': 'hero-wave-border-pink-400',\n};\n\n/**\n * Hero A remix of the flexible hero\n *\n * @param {IHero} props - The props for the Hero component\n * @returns {React.FC<IHero>} Component\n */\nconst Hero: React.FC<IHero> = ({\n headline,\n richHeadline,\n copy,\n bgImage,\n color,\n useVariant,\n button1,\n button2,\n className = '',\n waveBorderColor,\n children,\n}) => {\n return (\n <div data-testid=\"hero\" className={twMerge('mb-0', className)}>\n <div\n data-testid=\"hero-wrapper\"\n className={clsx(\n `flex md:flex-row ${bgColors[color]}`,\n useVariant ? 'flex-col' : 'flex-col-reverse'\n )}\n >\n <div\n data-testid=\"hero-variant\"\n className={clsx(\n `px-6 sm:px-16 sm:py-12 md:px-10 text-center flex flex-col items-center justify-center relative z-[1] after:${bgColors[color]} min-h-[272px] sm:min-h[208px]`,\n !useVariant\n ? 'md:basis-[46%] py-8'\n : waveBorderColor\n ? waveBorders[waveBorderColor]\n : color === 'base 300' || color === 'base 400'\n ? waveBorders['base 200']\n : waveBorders['base 300'],\n\n useVariant &&\n `hero-wave hero-wave-gradient-${bgColors[color]} md:basis-[64%] py-12`\n )}\n >\n <Heading\n size=\"h1\"\n className={clsx(\n color === 'base 100' || color === 'base 200'\n ? 'text-mkNavy-400 [&_*]:text-mkNavy-400'\n : 'text-neutral-100 [&_*]:text-neutral-100'\n )}\n >\n {richHeadline || headline}\n </Heading>\n\n {copy && (\n <Paragraph\n size={useVariant ? 'body1' : 'body3'}\n className={clsx(\n 'mt-4 md:mt-6',\n useVariant ? 'mb-6 md:mb-8' : 'mb-8',\n color === 'base 100' || color === 'base 200'\n ? 'text-neutral-800'\n : 'text-neutral-100'\n )}\n >\n {copy}\n </Paragraph>\n )}\n\n {(button1 || button2) && (\n <div\n data-testid=\"hero-buttons\"\n className=\"flex w-full flex-col sm:flex-row items-center justify-center mt-4 md:mt-6 sm:space-x-4 space-y-4 sm:space-y-0\"\n >\n {button1 && (\n <div className=\"w-full\">\n <Button\n data-testid=\"hero-button-1\"\n size=\"md\"\n type=\"button\"\n href={button1.url}\n newTab={button1.target === '_blank'}\n variant={\n color === 'base 100' || color === 'base 200'\n ? 'light'\n : 'dark'\n }\n color=\"primary\"\n className={clsx(button1 && button2 ? 'w-full' : 'w-auto')}\n >\n {button1.label}\n </Button>\n </div>\n )}\n {button2 && (\n <div className=\"w-full\">\n <Button\n data-testid=\"hero-button-2\"\n size=\"md\"\n type=\"button\"\n href={button2.url}\n newTab={button2.target === '_blank'}\n variant={\n color === 'base 100' || color === 'base 200'\n ? 'light'\n : 'dark'\n }\n color=\"secondary\"\n className={clsx(button1 && button2 ? 'w-full' : 'w-auto')}\n >\n {button2.label}\n </Button>\n </div>\n )}\n </div>\n )}\n <div\n className={clsx(\n color === 'base 100' && 'hero-wave-vector-variant',\n color === 'base 200' && 'hero-wave-vector-variant2',\n color === 'base 300' || color === 'base 400'\n ? 'hero-wave-vector'\n : ''\n )}\n />\n\n {children}\n </div>\n\n {bgImage.url && (\n <div\n className={clsx(\n `w-full relative md:min-h-[540px] md:aspect-auto xl:aspect-[17/10]`,\n useVariant ? 'aspect-square sm:aspect-[74/55]' : 'aspect-[17/10]'\n )}\n >\n <ContentfulImage\n src={bgImage.url}\n alt={bgImage.altTitle || 'Hero Image'}\n layout=\"fill\"\n priority={true}\n className=\"object-cover\"\n data-testid=\"hero-image\"\n />\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default Hero;\n","import { addHttps } from '@/component-library-lib/utils/stringReplace/common';\nimport Hero from '@/component-library/organisms/Hero/Hero';\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\nimport { InferContentfulResponse } from '@/component-library-lib/dataSource/contentful/helpers';\nimport { Topics } from '@/component-library-lib/dataSource/contentful/models/topics';\n\n/**\n * HeroContainerProps\n *\n * @typedef HeroContainerProps\n */\ntype HeroContainerProps = InferContentfulResponse<Topics['Hero']> & {\n /** Classname */\n className?: string;\n /** Whether to use a variant for the hero */\n useVariant?: boolean;\n /** Wave border color */\n waveBorderColor?: 'base 200' | 'base 300' | 'light green 400' | 'pink 400';\n /** The children to display. */\n children?: React.ReactNode;\n};\n\n/**\n * @param {object} props - HeroContainerProps\n * @returns {React.ReactNode} - HeroContainer\n */\nexport const HeroContainer = (props: HeroContainerProps) => {\n return (\n <Hero\n className={props.className}\n headline={props.fields.headline}\n richHeadline={documentToReactComponents(props.fields.richHeadline, {\n renderMark: {\n /**\n * Bold\n *\n * @param {string} text - The text to be bolded\n * @returns {React.ReactElement} Component\n */\n bold: (text) => (\n <span className=\"font-bold text-mkNavy-400\">{text}</span>\n ),\n /**\n * Italic\n *\n * @param {string} text - The text to be italicized\n * @returns {React.ReactElement} Component\n */\n italic: (text) => (\n <span className=\"font-light font-amasis italic text-mkNavy-400\">\n {text}\n </span>\n ),\n },\n })}\n copy={props.fields.copy}\n bgImage={{\n url: addHttps(props.fields.backgroundImage?.fields.file?.url),\n altTitle: props.fields.backgroundImage?.fields.title,\n }}\n color={props.fields.color}\n waveBorderColor={props.waveBorderColor}\n useVariant={!!props.useVariant}\n button1={props.fields.actionLink1?.fields}\n button2={props.fields.actionLink2?.fields}\n >\n {props.children}\n </Hero>\n );\n};\n","import { IBlobListItem } from './BlobList';\n\n/**\n * @param {IBlobListItem} props - The props for the Blob component\n * @returns {React.FC<IBlobListItem>} Blob Component\n */\nconst BlobFour: React.FC<IBlobListItem> = ({\n size,\n color,\n id = 'blob-four',\n}) => {\n return (\n <svg\n height={size}\n id={id}\n data-testid=\"svg-blob-four\"\n viewBox=\"0 0 316 114\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M91 72C91 43.2812 122.221 6.99999 159.5 6.99999C196.779 7 226 43.2812 226 72C226 100.719 201.779 107.5 164.5 107.5C127.221 107.5 91 100.719 91 72Z\"\n fill={color}\n />\n </svg>\n );\n};\n\nexport default BlobFour;\n","import { IBlobListItem } from './BlobList';\n\n/**\n * @param {IBlobListItem} props - The props for the Blob component\n * @returns {React.FC<IBlobListItem>} Blob Component\n */\nconst BlobOne: React.FC<IBlobListItem> = ({ size, color, id = 'blob-one' }) => {\n return (\n <svg\n height={size}\n id={id}\n data-testid=\"svg-blob-one\"\n viewBox=\"0 0 316 114\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M246 46C246 77.2041 206.601 102.5 158 102.5C109.399 102.5 70 77.2041 70 46C70 14.7959 109.399 12 158 12C206.601 12 246 14.7959 246 46Z\"\n fill={color}\n />\n </svg>\n );\n};\n\nexport default BlobOne;\n","import { IBlobListItem } from './BlobList';\n\n/**\n * @param {IBlobListItem} props - The props for the Blob component\n * @returns {React.FC<IBlobListItem>} Blob Component\n */\nconst BlobThree: React.FC<IBlobListItem> = ({\n size,\n color,\n id = 'blob-three',\n}) => {\n return (\n <svg\n height={size}\n id={id}\n data-testid=\"svg-blob-three\"\n viewBox=\"0 0 316 114\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M209.373 85.341C209.373 116.332 184.218 113.958 153.187 113.958C122.156 113.958 97 116.332 97 85.341C113.856 -17.1317 152.496 2.50801 183.527 2.50801C245.895 8.68072 209.373 54.3502 209.373 85.341Z\"\n fill={color}\n />\n </svg>\n );\n};\n\nexport default BlobThree;\n","import { IBlobListItem } from './BlobList';\n\n/**\n * @param {IBlobListItem} props - The props for the Blob component\n * @returns {React.FC<IBlobListItem>} Blob Component\n */\nconst BlobTwo: React.FC<IBlobListItem> = ({ size, color, id = 'blob-two' }) => {\n return (\n <svg\n height={size}\n id={id}\n data-testid=\"svg-blob-two\"\n viewBox=\"0 0 316 114\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M231.5 31.0411C231.5 60.3122 202.189 110.041 168.5 110.041C134.811 110.041 84 114.812 84 85.541C84 56.2699 134.811 4.04098 168.5 4.04098C202.189 4.04098 231.5 1.76997 231.5 31.0411Z\"\n fill={color}\n />\n </svg>\n );\n};\n\nexport default BlobTwo;\n","import BlobFour from './BlobFour';\nimport BlobOne from './BlobOne';\nimport BlobThree from './BlobThree';\nimport BlobTwo from './BlobTwo';\n\n/**\n * The type of the Blob\n *\n * @interface IBlobListItem\n */\nexport interface IBlobListItem {\n /**\n * The size of the blob\n *\n * @memberof IBlobListItem\n * @member {number} size\n */\n size: number;\n /**\n * The color of the blob\n *\n * @memberof IBlobListItem\n * @member {string} color\n */\n color: string;\n /**\n * The id of the blob\n *\n * @memberof IBlobListItem\n * @member {string} [id]\n */\n id?: string;\n}\n\nconst BlobList = {\n blobOne: BlobOne,\n blobTwo: BlobTwo,\n blobThree: BlobThree,\n blobFour: BlobFour,\n};\n\nexport default BlobList;\n","import {\n ColorShade,\n ColorType,\n Colors,\n} from '@/component-library/atoms/Colors/Colors';\nimport BlobList from './Blobs/BlobList';\n\n/** The type of the Blob */\nexport type BlobType = keyof typeof BlobList;\n\n/**\n * IBlob\n *\n * @interface IBlob\n */\nexport interface IBlob {\n /**\n * The type of the Blob\n *\n * @memberof IBlob\n * @member {BlobType} blob\n */\n blob: BlobType;\n /**\n * The size of the blob\n *\n * @memberof IBlob\n * @member {number} size\n */\n size: number;\n /**\n * The color of the blob\n *\n * @memberof IBlob\n * @member {ColorType} colorType\n */\n colorType: ColorType;\n /**\n * The shade of the blob\n *\n * @memberof IBlob\n * @member {ColorShade} colorShade\n */\n colorShade: ColorShade;\n /**\n * The id of the blob\n *\n * @memberof IBlob\n * @member {string} [id]\n */\n id?: string;\n /**\n * The optional classes of the blob\n *\n * @memberof IBlob\n * @default ''\n * @member {string} [className]\n */\n className?: string;\n}\n\n/**\n * Returns the selected blob based on the provided blob type.\n *\n * @param {BlobType} blob - The type of the blob.\n * @returns {React.FC<IBlob>} The selected blob component.\n */\nexport const chooseBlob = (blob: BlobType) => {\n const SelectedBlob = BlobList[blob];\n return SelectedBlob;\n};\n\n/**\n * Blob A blob image\n *\n * @param {IBlob} props - The props for the Blob component\n * @returns {React.FC<IBlob>} Component\n */\nconst Blob: React.FC<IBlob> = ({\n blob,\n size,\n colorType,\n colorShade,\n id,\n className = '',\n}) => {\n const color = Colors[colorType][colorShade];\n const SelectedBlob = chooseBlob(blob);\n return (\n <div data-testid={`blob-${blob}`} className={className}>\n <SelectedBlob size={size} color={color as string} id={id}></SelectedBlob>\n </div>\n );\n};\n\nexport default Blob;\n","import Blob, { BlobType } from '@/component-library/atoms/Blob/Blob';\nimport ButtonLink from '@/component-library/atoms/ButtonLink/ButtonLink';\nimport { ColorType } from '@/component-library/atoms/Colors/Colors';\nimport Icon, { IconType } from '@/component-library/atoms/Icon/Icon';\nimport React, { HTMLAttributeAnchorTarget } from 'react';\n\n/**\n * IActionLink\n *\n * @interface IActionLink\n */\ninterface IActionLink {\n /**\n * The label\n *\n * @memberof IActionLink\n * @member {string} label\n */\n label: string;\n /**\n * The url\n *\n * @memberof IActionLink\n * @member {string} url\n */\n url: string;\n /**\n * The target\n *\n * @memberof IActionLink\n * @member {HTMLAttributeAnchorTarget} target\n */\n target: HTMLAttributeAnchorTarget;\n}\n\n/**\n * IIconCard\n *\n * @interface\n */\nexport interface IIconCard {\n /**\n * The title to display.\n *\n * @memberof IIconCard\n * @member {string} title\n */\n title: string;\n /**\n * The description to display.\n *\n * @memberof IIconCard\n * @member {string | React.ReactNode} description\n */\n description: string | React.ReactNode;\n /**\n * The blob to display\n *\n * @memberof IIconCard\n * @member {BlobType} blob\n */\n blob: BlobType;\n /**\n * The icon to display\n *\n * @memberof IIconCard\n * @member {IconType} icon\n */\n icon: IconType;\n /**\n * The color for the icon\n *\n * @memberof IIconCard\n * @default 'base'\n * @member {ColorType} [iconColor]\n */\n iconColor?: ColorType;\n /**\n * The optional classes to apply to the component.\n *\n * @memberof IIconCard\n * @default ''\n * @member {string} [className]\n */\n className?: string;\n /**\n * The optional hideBlob\n *\n * @memberof IIconCard\n * @default false\n * @member {boolean} [hideBlob]\n */\n hideBlob?: boolean;\n /**\n * The optional blobBackgroundColor\n *\n * @memberof IIconCard\n * @default 'base'\n * @member {ColorType} [blobBackgroundColor]\n */\n blobBackgroundColor?: ColorType;\n /**\n * The optional action link\n *\n * @memberof IIconCard\n * @member {IActionLink} [actionLink]\n */\n actionLink?: IActionLink;\n}\n\n/**\n * IIconCard Displays an image, title and description. Description is passed in\n * as either a string or a React Node so things like text with links can be\n * passed in\n *\n * @param {IIconCard} props - The props for the InfoGraphicCard component\n * @returns {React.FC<IIconCard>} IIconCard Component\n */\nconst IconCard: React.FC<IIconCard> = ({\n title,\n description,\n blob,\n icon,\n iconColor = 'base',\n className = '',\n hideBlob = false,\n blobBackgroundColor = 'base',\n actionLink,\n}) => {\n return (\n <div\n data-testid=\"icon-card\"\n className={`w-full px-6 mb:px-8 text-center ${className}`}\n >\n <div className=\"relative h-[114px] mb-6 md:mb-8 flex items-center justify-center\">\n {!hideBlob && (\n <Blob\n blob={blob}\n size={114}\n colorType={blobBackgroundColor}\n colorShade={100}\n />\n )}\n <Icon\n icon={icon}\n size={80}\n colorType={iconColor}\n colorShade={400}\n classes=\"absolute\"\n />\n </div>\n <span className=\"text-h5 block mb-4 text-mkNavy-400 font-bold font-petco\">\n {title}\n </span>\n <div className=\"[&>p>a]:underline [&>p>a]:hover:text-base-300\">\n {description}\n </div>\n {actionLink && (\n <ButtonLink\n variant=\"light\"\n href={actionLink.url}\n className=\"[&>a]:text-mkNavy-400 mt-6\"\n target={actionLink.target}\n >\n {actionLink.label}\n </ButtonLink>\n )}\n </div>\n );\n};\n\nexport default IconCard;\n","import { BlobType } from '@/component-library/atoms/Blob/Blob';\nimport { IconType } from '@/component-library/atoms/Icon/Icon';\nimport Paragraph from '@/component-library/atoms/Paragraph/Paragraph';\nimport IconCard from '@/component-library/molecules/IconCard/IconCard';\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\nimport { BLOCKS } from '@contentful/rich-text-types';\nimport { InferContentfulResponse } from '@/component-library-lib/dataSource/contentful/helpers';\nimport { Topics } from '@/component-library-lib/dataSource/contentful/models/topics';\n\n/**\n * IconCardContainerProps\n *\n * @typedef IconCardContainerProps\n */\ntype IconCardContainerProps = InferContentfulResponse<Topics['IconCard']>;\n\n/**\n * @param {IconCardContainerProps} props - The props for the Card\n * @returns {React.ReactNode} - The IconCard Container\n */\nexport const IconCardContainer = (props: IconCardContainerProps) => {\n const {\n title,\n copyRichText,\n blob,\n icon,\n iconColor,\n iconBackgroundColor,\n removeBackground,\n actionLink,\n } = props.fields;\n\n let selectedBlob;\n switch (blob) {\n case 'Icon background 1':\n selectedBlob = 'blobOne';\n break;\n case 'Icon background 2':\n selectedBlob = 'blobTwo';\n break;\n case 'Icon background 3':\n selectedBlob = 'blobThree';\n break;\n case 'Icon background 4':\n selectedBlob = 'blobFour';\n break;\n }\n\n let selectedBackgroundColor;\n switch (iconBackgroundColor) {\n case 'Light Purple':\n selectedBackgroundColor = 'base';\n break;\n case 'Light Green':\n selectedBackgroundColor = 'mkLightGreen';\n break;\n }\n\n let selectedIconColor;\n switch (iconColor) {\n case 'Primary Purple':\n selectedIconColor = 'base';\n break;\n case 'Primary Navy':\n selectedIconColor = 'mkNavy';\n break;\n }\n\n return (\n <IconCard\n title={title}\n description={\n copyRichText\n ? documentToReactComponents(copyRichText, {\n renderNode: {\n /**\n * @param {object} _ - Node Data\n * @param {React.ReactNode} children - Node Children Tree\n * @returns {React.ReactNode} - ReactNode\n */\n [BLOCKS.PARAGRAPH]: (_, children) => (\n <Paragraph size=\"body4\">{children}</Paragraph>\n ),\n },\n })\n : ''\n }\n blob={selectedBlob as BlobType}\n icon={`illustration${icon}` as IconType}\n iconColor={selectedIconColor}\n hideBlob={removeBackground}\n blobBackgroundColor={selectedBackgroundColor}\n actionLink={actionLink?.fields}\n />\n );\n};\n","import { InferContentfulResponse } from '@/component-library-lib/dataSource/contentful/helpers';\nimport { Topics } from '@/component-library-lib/dataSource/contentful/models/topics';\n\n/**\n * IframeContainerProps\n *\n * @typedef IframeContainerProps\n */\ntype IframeContainerProps = InferContentfulResponse<Topics['Iframe']>;\n\n/**\n * @param {IframeContainerProps} props - The props for the Iframe Container\n * @returns {React.ReactNode} The rendered component\n */\nexport const IframeContainer = (props: IframeContainerProps) => {\n const { source, height, width, useContainer } = props.fields;\n\n return (\n <div\n className={useContainer ? 'page-max-w' : ''}\n data-testid=\"iframe-container\"\n >\n <iframe src={source} width={width} height={height}></iframe>\n </div>\n );\n};\n","import { accentProps } from '@/component-library-lib/constants/accents';\nimport { useAccent } from '@/component-library-lib/hooks/accentContext/AccentContext';\nimport AnimateItem from '@/component-library/atoms/AnimateItem/AnimateItem';\nimport ButtonLink from '@/component-library/atoms/ButtonLink/ButtonLink';\nimport ContentfulImage from '@/component-library/atoms/ContentfulImage/ContentfulImage';\nimport Heading from '@/component-library/atoms/Heading/Heading';\nimport Paragraph from '@/component-library/atoms/Paragraph/Paragraph';\nimport clsx from 'clsx';\nimport React from 'react';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * IImageContent1by1\n *\n * @interface IImageContent1by1\n */\nexport interface IImageContent1by1 {\n /**\n * The text to display\n *\n * @memberof IImageContent1by1\n * @member {string} overline\n */\n overline: string;\n /**\n * The title to display\n *\n * @memberof IImageContent1by1\n * @member {React.ReactNode} headline\n */\n headline: React.ReactNode;\n /**\n * The image src\n *\n * @memberof IImageContent1by1\n * @member {string} imageSrc\n */\n imageSrc: string;\n /**\n * The image alt\n *\n * @memberof IImageContent1by1\n * @member {string} [imageAlt]\n */\n imageAlt?: string;\n /**\n * The copy to display\n *\n * @memberof IImageContent1by1\n * @member {string | React.ReactNode} copy\n */\n copy: string | React.ReactNode;\n /**\n * The orientation of the image\n *\n * @memberof IImageContent1by1\n * @default 'Left'\n * @member {'Left' | 'Right'} [orientation]\n */\n orientation?: 'Left' | 'Right';\n /**\n * Hide the background\n *\n * @memberof IImageContent1by1\n * @default false\n * @member {boolean} [hideBackground]\n */\n hideBackground?: boolean;\n /**\n * The button\n *\n * @memberof IImageContent1by1\n * @member {object} button\n */\n button?: {\n /**\n * The label to display on the button.\n *\n * @memberof IImageContent1by1\n * @member {string} label\n */\n label: string;\n /**\n * The URL that the button should navigate to.\n *\n * @memberof IImageContent1by1\n * @member {string} url\n */\n url: string;\n /**\n * The target window or frame that the linked document will open in.\n *\n * @memberof IImageContent1by1\n * @member {'_blank' | '_self' | '_parent' | '_top'} [target]\n */\n target?: '_blank' | '_self' | '_parent' | '_top';\n /**\n * The alternate text to display when the image cannot be displayed.\n *\n * @memberof IImageContent1by1\n * @member {string} [altTitle]\n */\n altTitle?: string;\n /**\n * The onClick event handler.\n *\n * @memberof IImageContent1by1\n * @member {(event: React.MouseEvent) => void} [onClick]\n */\n onClick?: (event: React.MouseEvent) => void;\n };\n /**\n * Optional className\n *\n * @memberof IImageContent1by1\n * @default ''\n * @member {string} [className]\n */\n className?: string;\n}\n\n/**\n * ImageContent1by1 Image Content1by1 Organism\n *\n * @param {IImageContent1by1} props - The props for the ImageContent1by1\n * component\n * @returns {React.FC<IImageContent1by1>} Component\n */\nconst ImageContent1by1: React.FC<IImageContent1by1> = ({\n overline,\n headline,\n imageSrc,\n imageAlt = 'Image',\n copy,\n button,\n orientation = 'Left',\n hideBackground = false,\n className = '',\n}) => {\n const { accent } = useAccent();\n\n return (\n <div\n data-testid=\"image-content1by1\"\n className={twMerge(\n clsx(\n 'relative mb-16 sm:mb-20 md:mb-28',\n className,\n hideBackground ? '' : 'lg:pt-20'\n )\n )}\n >\n {!hideBackground ? (\n <div className=\"hidden md:flex max-w-[1440px] mx-auto\">\n {orientation === 'Left' ? (\n <>\n <div className=\"-mt-10 lg:-mt-20 bg-base-200 w-[41%] h-[472px] md:h-[840px] lg:h-[1000px] after:hidden before:xl:block before:bg-base-200 before:h-[472px] before:md:h-[840px] before:lg:h-[1000px] before:absolute before:left-0 before:w-1/3\" />\n <div className=\"bg-base-100 w-[59%] h-[530px] md:h-[840px] lg:h-[1000px] before:hidden after:xl:block after:bg-base-100 after:h-[530px] after:lg:h-[1000px] after:absolute after:right-0 after:w-1/3\" />\n </>\n ) : (\n <>\n <div className=\"bg-base-100 w-[59%] h-[530px] md:h-[840px] lg:h-[1000px] after:hidden before:xl:block before:bg-base-100 before:h-[472px] before:md:h-[840px] before:lg:h-[1000px] before:absolute before:left-0 before:w-1/3\" />\n <div className=\"-mt-10 lg:-mt-20 bg-base-200 w-[41%] h-[472px] md:h-[840px] lg:h-[1000px] before:hidden after:xl:block after:bg-base-200 after:h-[530px] after:lg:h-[1000px] after:absolute after:right-0 after:w-1/3\" />\n </>\n )}\n </div>\n ) : null}\n\n <div\n className={clsx(\n 'md:bg-unset inset-0 z-[1] top-12 md:top-[72px] before:block before:md:hidden before:absolute before:top-0 before:w-full before:h-40 md:pb-0 before:sm:h-80',\n hideBackground\n ? 'bg-none before:bg-none'\n : 'bg-base-100 before:bg-base-200 py-12 sm:py-16 md:absolute md:pt-20'\n )}\n >\n <div className=\"page-max-w\">\n <div className=\"md:grid md:grid-cols-12 md:gap-6 md:items-center\">\n <div\n className={clsx(\n 'md:col-span-7',\n orientation === 'Left'\n ? 'md:order-1'\n : 'md:order-2 md:col-start-6'\n )}\n >\n <div className=\"w-full mb-6 md:mb-0\">\n <ContentfulImage\n src={imageSrc}\n alt={imageAlt}\n layout=\"responsive\"\n width={780}\n height={780}\n objectFit=\"cover\"\n className=\"rounded-3xl overflow-hidden\"\n />\n </div>\n </div>\n <div\n className={clsx(\n 'md:col-span-4',\n orientation === 'Left'\n ? 'md:order-2 md:col-start-9'\n : 'md:order-1'\n )}\n >\n <AnimateItem from={{ translateY: 20 }}>\n <Paragraph\n size=\"body3\"\n font=\"petco\"\n className=\"text-neutral-700 mb-2 lg:mb-3\"\n >\n {overline}\n </Paragraph>\n <Heading\n size=\"h2\"\n className=\"text-mkNavy-400 [&>*]:text-mkNavy-400 [&>p>*]:text-mkNavy-400 mb-4 lg:mb-8\"\n >\n {headline}\n </Heading>\n <div\n className={clsx(\n accent === accentProps.ORG ? 'font-amasis' : 'font-petco',\n 'rich-text-with-links'\n )}\n >\n {copy}\n </div>\n {button && (\n <ButtonLink\n variant={\n accent === accentProps.ADOPT\n ? 'pink'\n : accent === accentProps.CARE\n ? 'lightBlue'\n : 'light'\n }\n href={button.url}\n alt={button.altTitle}\n target={button.target}\n className=\"border-b-0\"\n onClick={button?.onClick}\n >\n {button.label}\n </ButtonLink>\n )}\n </AnimateItem>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default ImageContent1by1;\n","import { useOverlay } from '@/component-library-lib/hooks/overlayContext/OverlayContext';\nimport { addHttps } from '@/component-library-lib/utils/stringReplace/common';\nimport { renderBreakLine } from '@/component-library-lib/utils/stringReplace/renderBreakLine';\nimport ImageContent1by1 from '@/component-library/organisms/ImageContent1by1/ImageContent1by1';\nimport {\n Options,\n documentToReactComponents,\n} from '@contentful/rich-text-react-renderer';\nimport { BLOCKS } from '@contentful/rich-text-types';\nimport { InferContentfulResponse } from '@/component-library-lib/dataSource/contentful/helpers';\nimport { Topics } from '@/component-library-lib/dataSource/contentful/models/topics';\n\n/**\n * ImageContent1By1ContainerProps\n *\n * @typedef ImageContent1By1ContainerProps\n */\ntype ImageContent1By1ContainerProps = InferContentfulResponse<\n Topics['ImageContent1By1']\n> & {\n /** ClassName */\n className?: string;\n};\n\n/**\n * Render Options\n *\n * @constant\n */\nconst renderOptions: Options = {\n renderNode: {\n /**\n * Embedded Asset\n *\n * @param {object} _ - The node\n * @param {React.ReactNode} children - The children\n * @returns {React.ReactElement} - Image Component\n */\n [BLOCKS.PARAGRAPH]: (_, children) => (\n <p className=\"text-neutral-800 mb-6 lg:mb-10 md:line-clamp-6 lg:line-clamp-[20] text-body3\">\n {children}\n </p>\n ),\n },\n renderText: renderBreakLine,\n};\n\n/**\n * @param {ImageContent1By1ContainerProps} props -\n * ImageContent1By1ContainerProps\n * @returns {React.ReactNode} - ImageContent1By1Container\n */\nexport const ImageContent1By1Container = (\n props: ImageContent1By1ContainerProps\n) => {\n const { updateShow } = useOverlay();\n\n const button = props.fields.actionLink\n ? {\n label: props.fields.actionLink.fields.label,\n altTitle: props.fields.actionLink.fields.altTitle,\n\n url: props.fields.actionLink?.fields.overlay\n ? '#'\n : props.fields.actionLink?.fields?.url,\n target: props.fields.actionLink?.fields.overlay\n ? undefined\n : props.fields.actionLink?.fields?.target,\n /**\n * Executes the onClick event handler.\n *\n * @param {React.MouseEvent} event - The event\n * @returns {void} This function does not return a value.\n */\n onClick: (event: React.MouseEvent) => {\n if (props.fields.actionLink?.fields.overlay) {\n event.preventDefault();\n updateShow(true);\n }\n },\n }\n : undefined;\n\n return (\n <ImageContent1by1\n className={props.className}\n overline={props.fields.overline}\n headline={documentToReactComponents(props.fields.headline, {\n renderMark: {\n /**\n * Bold\n *\n * @param {string} text - The text to be bolded\n * @returns {React.ReactElement} Component\n */\n bold: (text) => <span className=\"font-bold\">{text}</span>,\n /**\n * Italic\n *\n * @param {string} text - The text to be italicized\n * @returns {React.ReactElement} Component\n */\n italic: (text) => (\n <span className=\"font-light font-amasis italic\">{text}</span>\n ),\n },\n })}\n copy={\n props.fields.copyRichText\n ? documentToReactComponents(props.fields.copyRichText, renderOptions)\n : props.fields.copy\n }\n imageSrc={addHttps(props.fields.image?.fields.file?.url)}\n imageAlt={props.fields.image?.fields.title}\n button={button}\n orientation={props.fields.orientation}\n hideBackground={props.fields.hideBackground}\n />\n );\n};\n","import { bodySizeClasses } from '../Typography/TextClasses';\n\n/**\n * Base Classes\n * Label Input Base Classes\n * @constant\n */\nexport const baseClasses = `${bodySizeClasses.body4} h-[56px] w-full rounded-[4px] border border-neutral-300 py-0`;\n\n/**\n * Label Classes\n * Base Classes for the Label\n * @constant\n */\nexport const labelClasses =\n 'font-petco text-[12px] absolute text-neutral-700 duration-300 -translate-y-1 scale-60 top-[10px] z-10 origin-[0] bg-white px-[12px] left-0';\n\n/**\n * Label Focus Classes\n * Base Classes for the Label when the input is focused\n * @constant\n */\nexport const labelFocusClasses = 'peer-focus:text-[12px] peer-focus:top-[20px]';\n\n/**\n * Label Disabled Classes\n * Base Classes for the Label when the input is disabled\n */\nexport const labelDisabledClasses = '!text-neutral-600';\n\n/**\n * Label Peer Placeholder Shown Classes\n * Show when only the blank place holder is being shown\n * @constant\n */\nexport const labelPeerPlaceholderShownClasses =\n 'peer-placeholder-shown:scale-100 peer-placeholder-shown:text-[16px] peer-placeholder-shown:-translate-y-[14px] peer-placeholder-shown:top-1/2 peer-placeholder:transform peer:placeholder:-translate-top-1/2';\n\n/**\n * Input Classes\n * Classes for our input field\n * @constant\n */\nexport const inputClasses = `${baseClasses} bg-neutral-100 rounded-md border-1 border-neutral-700 appearance-none focus:outline-none focus:ring-2 focus:ring-base-400 focus:border-invisible peer pt-[16px]`;\n\n/**\n * Input Error Classes\n * Classes for our input field when there is an error\n * @constant\n */\nexport const inputErrorClasses =\n '!border-error-200 !border-solid !border-2 !focus:ring-0';\n\n/**\n * Input Disabled Classes\n * Classes for our input field when it is disabled\n * @constant\n */\nexport const inputDisabledClasses =\n '!border-neutral-600 text-neutral-600 cursor-not-allowed';\n\n/**\n * Error Message Classes\n * Classes for our error message\n * @constant\n */\nexport const errorMessageClasses = `${bodySizeClasses.overline} text-error-200 h-[20px]`;\n","import { errorMessageClasses } from '@/component-library/atoms/InputField/InputStyling';\nimport { FieldError, FieldErrorsImpl, Merge } from 'react-hook-form';\n\n/**\n * IInputError Interface for the InputError Component\n *\n * @interface\n */\nexport interface IInputError {\n /** The error object from react-hook-form */\n error:\n | FieldError\n | Merge<FieldError, FieldErrorsImpl<FieldError>>\n | undefined;\n /**\n * Optional classes for the component\n *\n * @default ''\n */\n classes?: string;\n}\n\n/**\n * Input Error Used to display an error message for a form input.\n *\n * @param {IInputError} props - The props for the InputError component\n * @returns {React.FC<IInputError>} InputError Component\n */\nconst InputError: React.FC<IInputError> = ({\n error,\n classes = '',\n}: IInputError) => {\n return (\n <div className={`flex h-[20px] ${classes}`}>\n <span\n className={errorMessageClasses}\n data-testid=\"input-error\"\n role=\"alert\"\n >\n {error ? (error.message as string) : ''}\n </span>\n </div>\n );\n};\n\nexport default InputError;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ColorShade, ColorType } from '@/component-library/atoms/Colors/Colors';\nimport Icon from '@/component-library/atoms/Icon/Icon';\nimport InputError from '@/component-library/atoms/InputError/InputError';\nimport {\n inputClasses,\n inputDisabledClasses,\n inputErrorClasses,\n labelClasses,\n labelDisabledClasses,\n} from '@/component-library/atoms/InputField/InputStyling';\nimport { bodySizeClasses } from '@/component-library/atoms/Typography/TextClasses';\nimport { Listbox, Transition } from '@headlessui/react';\nimport { LegacyRef, useEffect, useState } from 'react';\nimport { FieldError, FieldErrorsImpl, Merge } from 'react-hook-form';\n\n/**\n * IInputDropDown Interface for the Input Drop Down Values\n *\n * @interface\n */\nexport interface IInputDropDownOption {\n /** The name of the option. */\n name: string;\n /** The value of the option. */\n value: string;\n}\n\n/**\n * InputDropDown Interface for the Input Drop Down Component\n *\n * @interface\n */\nexport interface IInputDropDown {\n /** The label of the input. */\n label: string;\n /** The values to display in the drop down. */\n values: IInputDropDownOption[];\n /** If the input is read only. */\n readOnly?: boolean;\n /** The function to call when the input value changes. */\n inputRef?: LegacyRef<HTMLInputElement> | undefined;\n /**\n * @param value\n * @returns Void\n */\n onChange?: (value: IInputDropDownOption) => void;\n /** The error message to display. */\n error?: FieldError | Merge<FieldError, FieldErrorsImpl<any>> | undefined;\n /** The value set to the field */\n value?: IInputDropDownOption;\n /**\n * The optional classes to apply to the input.\n *\n * @default ''\n */\n classes?: string;\n}\n\n/**\n * Input Dynamic Dynamic Input Component that renders an input with a label that\n * moves over the top of the input when the input is focused.\n *\n * @param {IInputDropDown} props - The props to pass to the component.\n * @returns {React.FC<IInputDropDown>} Input Dynamic Component\n */\nconst InputDropDown: React.FC<IInputDropDown> = ({\n label,\n values,\n error,\n readOnly,\n onChange,\n value,\n classes,\n}) => {\n // Set Input State\n const [inputValue, setInputValue] = useState<IInputDropDownOption>({\n name: '',\n value: '',\n });\n\n useEffect(() => {\n if (value) {\n setInputValue(value);\n }\n }, [value]);\n\n /**\n * Change Value Change Value of input on the prop on change and state.\n *\n * @param {IInputDropDownOption} data - The data to set the input value to.\n */\n const changeValue = (data: IInputDropDownOption) => {\n if (data) {\n setInputValue(data);\n if (onChange) {\n onChange(data);\n }\n }\n };\n\n // Set Label and Input Classes\n let labelClass = labelClasses + ' leading-[20px]';\n let inputClass = inputClasses;\n\n // Set Chevron Color Shades based on state\n let chevronColorShade: ColorShade = 700;\n let chevronColorType: ColorType = 'neutral';\n\n // If there is an input value\n const isInputValue = inputValue.value !== '';\n\n // If there is an Input value Apply Particular Classes\n if (isInputValue) {\n chevronColorShade = 800;\n } else {\n labelClass = `${labelClasses} text-neutral-700 !text-[16px] !top-[18px]`;\n }\n\n // If there is an error apply additional classes\n if (error) {\n // Set Classes\n labelClass = `${labelClass} !text-error-200`;\n inputClass = `${inputErrorClasses} ${inputClass}`;\n // Set Chevron\n chevronColorShade = 200;\n chevronColorType = 'error';\n }\n\n // If their is a read only value apply additional classes\n if (readOnly) {\n // Set Classes\n inputClass = `${inputClass} ${inputDisabledClasses}`;\n labelClass = `${labelClass} ${labelDisabledClasses}`;\n // Set Chevron\n chevronColorShade = 600;\n chevronColorType = 'neutral';\n }\n const isError = error ? 'true' : 'false';\n const testId = `input-drop-down-${isInputValue}-${isError}-${readOnly}`;\n return (\n <div className={classes}>\n <Listbox\n as=\"div\"\n data-testid={testId}\n value={inputValue}\n onChange={changeValue}\n disabled={readOnly}\n >\n {({ open }) => (\n <>\n <div className=\"relative h-full w-full\">\n <Listbox.Button\n className={\n 'w-full ' +\n inputClass +\n `${\n open\n ? ' !rounded-b-none border-solid !border-base-400 !border-2'\n : ''\n }`\n }\n data-testid=\"input-drop-down-button\"\n >\n <span\n className={`${\n bodySizeClasses.body4\n } absolute top-[22px] left-[0px] text-left ml-[12px] truncate ${\n error ? 'text-error-200' : ''\n }`}\n data-testid=\"input-drop-down-value\"\n >\n {isInputValue && inputValue && inputValue.name}\n </span>\n <span className=\"absolute inset-y-0 right-0 flex items-center pr-2 pointer-events-none\">\n {open ? (\n <Icon\n icon=\"chevronUp\"\n size={22}\n colorType={chevronColorType}\n colorShade={chevronColorShade}\n />\n ) : (\n <Icon\n icon=\"chevronDown\"\n size={22}\n colorType={chevronColorType}\n colorShade={chevronColorShade}\n />\n )}\n </span>\n <Listbox.Label\n className={`${labelClass} ${error ? '!text-error-200' : ''}`}\n >\n {label}\n </Listbox.Label>\n </Listbox.Button>\n\n <Transition\n show={open}\n enter=\"transition ease-out duration-200\"\n enterFrom=\"opacity-0 translate-y-1\"\n leave=\"transition ease-in duration-200\"\n leaveFrom=\"opacity-100\"\n leaveTo=\"opacity-0\"\n className=\"absolute w-full rounded-md bg-white shadow-lg z-[11]\"\n >\n <Listbox.Options\n static\n className=\"max-h-[200px] rounded-md rounded-t-none text-base leading-6 shadow-xs overflow-auto focus:outline-none sm:text-sm sm:leading-5 bg-neutral-100\"\n >\n {values.map((value) => (\n <Listbox.Option\n key={value.value}\n value={value}\n data-testid={`dropdown-menu-item-${value.value}`}\n className=\"text-left\"\n >\n {({ selected, active }) => (\n <div\n className={`${selected ? 'bg-base-200' : ''} ${\n active ? 'bg-base-100' : ''\n } select-none relative px-[12px] py-[10px] hover:bg-base-100 cursor-pointer focus:bg-base-200`}\n >\n <span\n className={`${bodySizeClasses.body4} text-neutral-800 block truncate`}\n >\n {value.name}\n </span>\n </div>\n )}\n </Listbox.Option>\n ))}\n </Listbox.Options>\n </Transition>\n </div>\n </>\n )}\n </Listbox>\n <InputError error={error} />\n </div>\n );\n};\n\nexport default InputDropDown;\n","import Heading from '@/component-library/atoms/Heading/Heading';\nimport InputDropDown from '@/component-library/atoms/InputDropDown/InputDropDown';\nimport { useState } from 'react';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * ILink\n *\n * @interface ILink\n */\nexport interface ILink {\n /**\n * The ID of the link\n *\n * @memberof ILink\n * @member {string} id\n */\n id: string;\n /**\n * The Date to display\n *\n * @memberof ILink\n * @member {Date} displayDate\n */\n displayDate: Date;\n /**\n * The label to display on the button.\n *\n * @memberof ILink\n * @member {string} label\n */\n label: string;\n /**\n * The URL that the button should navigate to.\n *\n * @memberof ILink\n * @member {string} url\n */\n url: string;\n /**\n * The target window or frame that the linked document will open in.\n *\n * @memberof ILink\n * @member {'_blank' | '_self' | '_parent' | '_top'} [target]\n */\n target?: '_blank' | '_self' | '_parent' | '_top';\n /**\n * The alternate text to display when the image cannot be displayed.\n *\n * @memberof ILink\n * @member {string} [altTitle]\n */\n altTitle?: string;\n}\n\n/**\n * ILinkList\n *\n * @interface ILinkList\n */\nexport interface ILinkList {\n /**\n * The headline to display\n *\n * @memberof ILinkList\n * @member {string} headline\n */\n headline: string;\n /**\n * The boolean to control if the component should display the year filter\n *\n * @memberof ILinkList\n * @member {boolean} displayYearFilter\n */\n displayYearFilter: boolean;\n /**\n * The list of links to display\n *\n * @memberof ILinkList\n * @member {ILink[]} links\n */\n links: ILink[];\n /**\n * The optional className.\n *\n * @memberof ILinkList\n * @member {string} [className]\n */\n className?: string;\n /**\n * The function to call when the year is changed\n *\n * @memberof ILinkList\n * @member {Function} [onYearChange]\n * @param year\n * @returns {void}\n */\n onYearChange?: (year: string) => void;\n}\n\nconst currentYear = new Date().getFullYear();\n\n/**\n * LinkList A List of Links filterable by year\n *\n * @param {ILinkList} props - The props for the LinkList component\n * @returns {React.FC<ILinkList>} Component\n */\nconst LinkList: React.FC<ILinkList> = ({\n headline,\n displayYearFilter,\n links,\n className = '',\n onYearChange,\n}) => {\n const [activeYear, setActiveYear] = useState(\n displayYearFilter ? currentYear.toString() : ''\n );\n\n const years = Array.from(\n { length: currentYear - 2016 + 1 },\n (_, i) => 2016 + i\n );\n const yearsOptions = years.reverse().map((year) => ({\n name: '' + year,\n value: '' + year,\n }));\n\n /**\n * Formatted Date Formatted Date of the Prop\n *\n * @param {Date} date - The date in ISO 8601 format\n * @returns {string} - The formatted date\n */\n const formattedDate = (date: Date) => {\n return date.toLocaleDateString('en-us', {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n };\n\n return (\n <div\n data-testid=\"link-list\"\n className={twMerge(\n 'page-max-w lg:grid lg:grid-cols-12 lg:gap-4 py-12',\n className\n )}\n >\n <div className=\"lg:col-span-10 lg:col-start-2\">\n <div className=\"text-center\">\n <Heading size=\"h2\" className=\"text-mkNavy-400 mb-8\">\n {headline}\n </Heading>\n {displayYearFilter && (\n <InputDropDown\n label=\"Select year\"\n values={yearsOptions}\n value={{ name: activeYear, value: activeYear }}\n classes=\"sm:w-[446px] mx-auto mb-12 md:mb-16\"\n onChange={({ value }) => {\n setActiveYear(value);\n onYearChange?.(value);\n }}\n />\n )}\n </div>\n <hr className=\"mb-6 border border-t-0 border-neutral-300\" />\n <ul data-testid=\"link-list-items\">\n {links\n .filter(\n (link) =>\n activeYear === '' ||\n link.displayDate.getFullYear().toString() === activeYear\n )\n .map((link) => (\n <li key={link.id}>\n <p\n className=\"mb-4 sm:mb-3 font-petco text-body5 text-neutral-600\"\n suppressHydrationWarning\n >\n {formattedDate(link.displayDate)}\n </p>\n <a\n href={link.url}\n target={link.target}\n className=\"font-petco underline hover:text-base-300\"\n >\n {link.label}\n </a>\n <hr className=\"my-6 border border-t-0 border-neutral-300\" />\n </li>\n ))}\n </ul>\n </div>\n </div>\n );\n};\n\nexport default LinkList;\n","import { InferContentfulResponse } from '@/component-library-lib/dataSource/contentful/helpers';\nimport { Topics } from '@/component-library-lib/dataSource/contentful/models/topics';\nimport LinkList, {\n ILink,\n} from '@/component-library/organisms/LinkList/LinkList';\n\n/**\n * ILinkListContainerProps\n *\n * @typedef ILinkListContainerProps\n */\ntype LinkListContainerProps = InferContentfulResponse<Topics['LinkList']> & {\n /** The className of the component */\n className?: string;\n};\n\n/**\n * Target\n *\n * @typedef Target\n */\ntype Target = '_blank' | '_self' | '_parent' | '_top';\n\n/**\n * @param {LinkListContainerProps} props - LinkListContainerProps\n * @returns {React.ReactNode} - LinkListContainer\n */\nexport const LinkListContainer = (props: LinkListContainerProps) => {\n const petcoLoveDomain = process.env.NEXT_PUBLIC_PETCOLOVE_DOMAIN;\n\n /**\n * Helper function to generate links\n *\n * @returns {ILink[]} - Links\n */\n const generateLinks = () => {\n const items = [];\n for (const item of props.fields.links) {\n if (item?.sys.contentType.sys.id === 'rssLink') {\n const rssItem = item as InferContentfulResponse<Topics['RSSLink']>;\n items.push({\n id: rssItem.sys.id,\n displayDate: new Date(rssItem.fields.displayDate),\n label: rssItem.fields.label,\n url: rssItem.fields.url,\n target: rssItem?.fields.target as Target,\n altTitle: rssItem?.fields.altTitle,\n });\n }\n\n if (item?.sys.contentType.sys.id === 'pressRelease') {\n const pressItem = item as InferContentfulResponse<\n Topics['PressRelease']\n >;\n items.push({\n id: pressItem.sys.id,\n displayDate: new Date(pressItem.fields.publishDate),\n label: pressItem.fields.headline,\n url: `${petcoLoveDomain}/newsroom/news-story/${pressItem.fields.slugs}`,\n target: '_self' as Target,\n altTitle: '',\n });\n }\n }\n\n return items;\n };\n\n const links: ILink[] = props.fields.links ? generateLinks() : [];\n\n links.sort((a, b) => {\n return +b.displayDate - +a.displayDate;\n });\n\n return (\n <LinkList\n headline={props.fields.headline}\n displayYearFilter={props.fields.displayYearFilter}\n links={links}\n className={props.className}\n />\n );\n};\n","import useWindowSize from '@/component-library-lib/hooks/windowSize/WindowSize';\nimport contentFulImageLoader from '@/component-library-lib/loaders/contentfulImageLoader';\nimport AnimateItem from '@/component-library/atoms/AnimateItem/AnimateItem';\nimport ContentfulImage from '@/component-library/atoms/ContentfulImage/ContentfulImage';\nimport Heading from '@/component-library/atoms/Heading/Heading';\nimport Paragraph from '@/component-library/atoms/Paragraph/Paragraph';\nimport PageWrapper from '@/component-library/organisms/PageWrapper/PageWrapper';\nimport {\n documentToReactComponents,\n Options,\n} from '@contentful/rich-text-react-renderer';\nimport { BLOCKS, Document, MARKS } from '@contentful/rich-text-types';\n\n/**\n * Interface for a logo item component\n *\n * @interface ILogoItem\n */\nexport interface ILogoItem {\n /**\n * The logo image url\n *\n * @memberof ILogoItem\n * @member {string} url\n */\n url: string;\n /**\n * The logo image alt text\n *\n * @memberof ILogoItem\n * @member {string} [alt]\n */\n alt?: string;\n}\n\n/**\n * ILogoGrid\n *\n * @interface ILogoGrid\n */\nexport interface ILogoGrid {\n /**\n * The heading text\n *\n * @memberof ILogoGrid\n * @member {Document} heading\n */\n heading: Document;\n /**\n * The logos list\n *\n * @memberof ILogoGrid\n * @member {ILogoItem[]} logos\n */\n logos: ILogoItem[];\n}\n\nconst options: Options = {\n renderNode: {\n /**\n * @param {object} _ - Node Data\n * @param {React.ReactNode} children - Node Children Tree\n * @returns {React.ReactNode} - ReactNode\n */\n [BLOCKS.HEADING_1]: (_, children) => (\n <Heading size=\"h1\" className=\"text-center\">\n {children}\n </Heading>\n ),\n /**\n * @param {object} _ - Node Data\n * @param {React.ReactNode} children - Node Children Tree\n * @returns {React.ReactNode} - ReactNode\n */\n [BLOCKS.HEADING_2]: (_, children) => (\n <Heading size=\"h2\" className=\"text-center\">\n {children}\n </Heading>\n ),\n /**\n * @param {object} _ - Node Data\n * @param {React.ReactNode} children - Node Children Tree\n * @returns {React.ReactNode} - ReactNode\n */\n [BLOCKS.HEADING_3]: (_, children) => (\n <Heading size=\"h3\" className=\"text-center\">\n {children}\n </Heading>\n ),\n /**\n * @param {object} _ - Node Data\n * @param {React.ReactNode} children - Node Children Tree\n * @returns {React.ReactNode} - ReactNode\n */\n [BLOCKS.HEADING_4]: (_, children) => (\n <Heading size=\"h4\" className=\"text-center\">\n {children}\n </Heading>\n ),\n /**\n * @param {object} _ - Node Data\n * @param {React.ReactNode} children - Node Children Tree\n * @returns {React.ReactNode} - ReactNode\n */\n [BLOCKS.HEADING_5]: (_, children) => (\n <Heading size=\"h5\" className=\"text-center\">\n {children}\n </Heading>\n ),\n /**\n * @param {object} _ - Node Data\n * @param {React.ReactNode} children - Node Children Tree\n * @returns {React.ReactNode} - ReactNode\n */\n [BLOCKS.HEADING_6]: (_, children) => (\n <Heading size=\"h6\" className=\"text-center\">\n {children}\n </Heading>\n ),\n\n /**\n * @param {object} _ - Node Data\n * @param {React.ReactNode} children - Node Children Tree\n * @returns {React.ReactNode} - ReactNode\n */\n [BLOCKS.PARAGRAPH]: (_, children) => (\n <Paragraph size=\"body4\">{children}</Paragraph>\n ),\n },\n renderMark: {\n /**\n * Bold text\n *\n * @param {React.ReactNode} text - Text to render\n * @returns {React.ReactNode} - The formatted text\n */\n [MARKS.BOLD]: (text) => <span className=\"text-base-300\">{text}</span>,\n },\n};\n\n/**\n * LogoGrid\n *\n * @param {ILogoGrid} props - The props for the LogoGrid component\n * @returns {React.FC<ILogoGrid>} Component\n */\nconst LogoGrid: React.FC<ILogoGrid> = ({ heading, logos }: ILogoGrid) => {\n // Get the current window size\n const size = useWindowSize();\n\n // Set the number of logical columns based on the window size\n const columns = size.breakpoint === 'xs' ? 3 : 5;\n\n return (\n <PageWrapper classes=\"page-max-w px-6 sm:px-8 md:px-10\">\n <div data-testid=\"logo-grid\">\n <div data-testid=\"logo-grid-heading\" className=\"mb-8 md:mb-12\">\n {documentToReactComponents(heading, options)}\n </div>\n\n <div className=\"grid grid-cols-[repeat(3,_70px)] sm:grid-cols-[repeat(5,_70px)] md:grid-cols-[repeat(5,_150px)] gap-y-6 sm:gap-y-8 md:gap-y-12 justify-between\">\n {logos.map((logo, index) => (\n <AnimateItem\n key={logo.url}\n from={{ translateY: 20 }}\n delay={(index % columns) * 0.2 + 0.1}\n >\n <div className=\"w-[70px] md:w-[150px] relative aspect-[35/24]\">\n <ContentfulImage\n src={logo.url}\n alt={logo.alt || 'Logo'}\n layout=\"fill\"\n objectFit=\"contain\"\n loader={contentFulImageLoader}\n sizes=\"(max-width: 739px) 70px, (max-width: 1199px) 150px, 150px\"\n />\n </div>\n </AnimateItem>\n ))}\n </div>\n </div>\n </PageWrapper>\n );\n};\n\nexport default LogoGrid;\n","import { addHttps } from '@/component-library-lib/utils/stringReplace/common';\nimport LogoGrid from '@/component-library/organisms/LogoGrid/LogoGrid';\nimport { InferContentfulResponse } from '@/component-library-lib/dataSource/contentful/helpers';\nimport { Topics } from '@/component-library-lib/dataSource/contentful/models/topics';\n\n/**\n * LogoGridContainerProps\n *\n * @typedef LogoGridContainerProps\n */\ntype LogoGridContainerProps = InferContentfulResponse<Topics['LogoGrid']>;\n\n/**\n * @param {LogoGridContainerProps} props - LogoGridContainerProps\n * @returns {React.ReactNode} - LogoGridContainer\n */\nexport const LogoGridContainer = (props: LogoGridContainerProps) => {\n const logos = props.fields.logos\n .map((logo) => ({\n url: addHttps(logo?.fields?.file?.url),\n alt: logo?.fields.description || logo?.fields.title,\n }))\n .filter((logo) => logo.url);\n\n return (\n <div>\n <LogoGrid heading={props.fields.heading} logos={logos} />\n </div>\n );\n};\n","import { addHttps } from '@/component-library-lib/utils/stringReplace/common';\nimport ContentfulImage from '@/component-library/atoms/ContentfulImage/ContentfulImage';\nimport { InferContentfulResponse } from '@/component-library-lib/dataSource/contentful/helpers';\nimport { Topics } from '@/component-library-lib/dataSource/contentful/models/topics';\n\n/**\n * MediaElementContainerProps\n *\n * @typedef MediaElementContainerProps\n */\ntype MediaElementContainerProps = InferContentfulResponse<\n Topics['MediaElement']\n>;\n\n/**\n * @param {MediaElementContainerProps} props - MediaElementContainerProps\n * @returns {React.ReactNode} - MediaElementContainer\n */\nexport const MediaElementContainer = (props: MediaElementContainerProps) => {\n return (\n <div data-testid=\"media-element-container\">\n <ContentfulImage\n src={addHttps(props.fields.mediaElement?.fields?.file?.url)}\n alt={props.fields.mediaElement?.fields?.title || 'Image'}\n layout=\"responsive\"\n width={644}\n height={498}\n objectFit=\"cover\"\n className=\"rounded-3xl overflow-hidden\"\n />\n </div>\n );\n};\n","import ContentfulImage from '@/component-library/atoms/ContentfulImage/ContentfulImage';\nimport Paragraph from '@/component-library/atoms/Paragraph/Paragraph';\nimport Link from 'next/link';\n\n/**\n * IPetAndOwnerCard Interface for the Pet And Owner Card Component\n *\n * @interface IPetAndOwnerCard\n */\nexport interface IPetAndOwnerCard {\n /**\n * The Name of the Pet\n *\n * @memberof IPetAndOwnerCard\n * @member {string} petName\n */\n petName: string;\n /**\n * The Name of the Owner\n *\n * @memberof IPetAndOwnerCard\n * @member {string} ownerName\n */\n ownerName: string;\n /**\n * The Description of the Card\n *\n * @memberof IPetAndOwnerCard\n * @member {string} description\n */\n description: string;\n /**\n * The Image of the Card\n *\n * @memberof IPetAndOwnerCard\n * @member {string} image\n */\n image: string;\n /**\n * The Link for the Card\n *\n * @memberof IPetAndOwnerCard\n * @member {string} link\n */\n link: string;\n}\n\n/**\n * PetAndOwnerCard Component\n *\n * @param {IPetAndOwnerCard} props - The props for the Pet And Owner Card\n * @returns {React.FC<IPetAndOwnerCard>} PetAndOwnerCard Component\n */\nconst PetAndOwnerCard: React.FC<IPetAndOwnerCard> = ({\n petName,\n ownerName,\n description,\n image,\n link,\n}: IPetAndOwnerCard) => {\n return (\n <Link\n href={link}\n className=\"focus-visible:outline-none py-[5px] w-full\"\n >\n <div\n data-testid=\"pet-and-owner-card\"\n className=\"group flex flex-col justify-center items-center focus-visible:outline-focus-400\"\n >\n <div className=\"aspect-square overflow-hidden rounded-[20px] md:rounded-3xl w-full relative\">\n <ContentfulImage\n layout=\"fill\"\n objectFit=\"cover\"\n alt={petName + ' + ' + ownerName}\n src={image}\n className=\"scale-100 group-hover:scale-[102%] transition-all duration-100\"\n sizes=\"(max-width: 739px) 100vw, (max-width: 1198px) 50vw, (max-width: 1439px) 33vw, 450px\"\n />\n </div>\n\n <span className=\"mt-3.5 line-clamp-1 text-h5 font-petco font-semibold text-secondaryBase-400\">\n {petName} <span className=\"text-base-300\">+</span> {ownerName}\n </span>\n <Paragraph\n size=\"body4\"\n font=\"petco\"\n className=\"mt-2 text-center line-clamp-2 font-petco max-w-[432px]\"\n >\n {description}\n </Paragraph>\n </div>\n </Link>\n );\n};\n\nexport default PetAndOwnerCard;\n","import PetAndOwnerCard from '@/component-library/molecules/PetAndOwnerCard/PetAndOwnerCard';\nimport { addHttps } from '@/component-library-lib/utils/stringReplace/common';\nimport { InferContentfulResponse } from '@/component-library-lib/dataSource/contentful/helpers';\nimport { Topics } from '@/component-library-lib/dataSource/contentful/models/topics';\n\n/**\n * PetAndOwnerCardContainerProps\n *\n * @typedef PetAndOwnerCardContainerProps\n */\ntype PetAndOwnerCardContainerProps = InferContentfulResponse<\n Topics['PetAndOwnerCard']\n>;\n\n/**\n * @param {PetAndOwnerCardContainerProps} props - Component props\n * @returns {React.ReactNode} - PetAndOwnerCardContainer component\n */\nexport const PetAndOwnerCardContainer = (\n props: PetAndOwnerCardContainerProps\n) => (\n <PetAndOwnerCard\n key={props.sys.id}\n petName={props.fields.petName}\n ownerName={props.fields.ownerName}\n description={props.fields.copy}\n image={addHttps(props.fields.image?.fields.file?.url)}\n link={props.fields.actionLink?.fields.url || ''}\n />\n);\n","import { addHttps } from '@/component-library-lib/utils/stringReplace/common';\nimport CarouselItemReunion from '@/component-library/molecules/CarouselItemReunion/CarouselItemReunion';\nimport { InferContentfulResponse } from '@/component-library-lib/dataSource/contentful/helpers';\nimport { Topics } from '@/component-library-lib/dataSource/contentful/models/topics';\n\n/**\n * ReunionCardContainerProps\n *\n * @typedef ReunionCardContainerProps\n */\ntype ReunionCardContainerProps = InferContentfulResponse<Topics['ReunionCard']>;\n\n/**\n * @param {ReunionCardContainerProps} props - ReunionCardContainer props\n * @returns {React.ReactNode} - ReunionCardContainer component\n */\nexport const ReunionCardContainer = (props: ReunionCardContainerProps) => (\n <CarouselItemReunion\n key={props.sys.id}\n petName={props.fields.petName}\n ownerName={props.fields.ownerName}\n description={props.fields.copy}\n image={addHttps(props.fields.image?.fields.file?.url)}\n link={props.fields.actionLink?.fields.url || ''}\n />\n);\n","import clsx from 'clsx';\n\n/**\n * @param {object} props - Separator props\n * @param {string} props.color - Color\n * @param {string} props.size - Size\n * @returns {React.ReactNode} - Separator\n */\nexport const SeparatorContainer = (props: {\n /** Color */\n color?: string;\n /** Size */\n size?: 'default' | 'small';\n}) => {\n const colorMap: Record<string, string> = {\n white: 'bg-neutral-100',\n 'base 100': 'bg-base-100',\n 'base 200': 'bg-base-200',\n 'base 300': 'bg-base-300',\n 'base 400': 'bg-base-400',\n };\n\n const color = props.color ? colorMap[props.color] : colorMap['white'];\n\n return (\n <div\n data-testid=\"separator-container\"\n className={clsx(\n props.size === 'small' ? 'h-8 sm:h-9 md:h-12' : 'h-16 sm:h-20 md:h-28',\n color\n )}\n />\n );\n};\n","import Button, { IButton } from '@/component-library/atoms/Button/Button';\nimport ContentfulImage from '@/component-library/atoms/ContentfulImage/ContentfulImage';\nimport Heading from '@/component-library/atoms/Heading/Heading';\nimport clsx from 'clsx';\n\n/**\n * ISideBySide\n *\n * @interface ISideBySide\n */\nexport interface ISideBySide {\n /**\n * The headline text to display.\n *\n * @memberof ISideBySide\n * @member {React.ReactNode | string} [title]\n */\n title?: React.ReactNode | string;\n /**\n * The content text to display.\n *\n * @memberof ISideBySide\n * @member {React.ReactNode | string} [body]\n */\n body?: React.ReactNode | string;\n /**\n * The button to display.\n *\n * @memberof ISideBySide\n * @member {IButton} [button1]\n */\n button1?: IButton;\n /**\n * The button to display.\n *\n * @memberof ISideBySide\n * @member {IButton} [button2]\n */\n button2?: IButton;\n /**\n * The image\n *\n * @memberof ISideBySide\n * @member {object} image\n */\n image: {\n /**\n * The image url\n *\n * @memberof ISideBySide.image\n * @member {string} url\n */\n url: string;\n /**\n * The image alt text\n *\n * @memberof ISideBySide.image\n * @member {string} [alt]\n */\n alt?: string;\n /**\n * The image width\n *\n * @memberof ISideBySide.image\n * @member {number} width\n */\n width: number;\n /**\n * The image height\n *\n * @memberof ISideBySide.image\n * @member {number} height\n */\n height: number;\n };\n /**\n * The image position\n *\n * @memberof ISideBySide\n * @member {boolean} imagePosition\n */\n imagePosition: boolean;\n /**\n * The optional classes\n *\n * @memberof ISideBySide\n * @default ''\n * @member {string} [className]\n */\n className?: string;\n}\n\n/**\n * SideBySide Illustration and content side by side\n *\n * @param {ISideBySide} props - The props for the SideBySide component\n * @returns {React.FC<ISideBySide>} Component\n */\nconst SideBySide: React.FC<ISideBySide> = ({\n title,\n body,\n button1,\n button2,\n image,\n imagePosition,\n className = '',\n}: ISideBySide) => {\n return (\n <div data-testid=\"side-by-side\" className={`py-12 sm:py-20 ${className}`}>\n <div className=\"grid grid-cols-4 sm:grid-cols-6 md:grid-cols-12 gap-4 sm:gap-6 md:gap-8 sm:items-center\">\n {image.url && (\n <div\n className={clsx(\n 'col-span-2 sm:col-span-3 md:col-span-3 mb-6 sm:mb-0',\n imagePosition ? 'sm:order-1 md:col-start-3' : 'sm:order-2'\n )}\n >\n <ContentfulImage\n src={image.url}\n alt={image.alt || 'Image'}\n width={image.width}\n height={image.height}\n />\n </div>\n )}\n\n <div\n className={clsx(\n 'col-span-4 sm:col-span-3 md:col-span-5',\n imagePosition ? 'sm:order-2' : 'sm:order-1 md:col-start-3'\n )}\n >\n {title && (\n <Heading size=\"h2\" font=\"petco\" className=\"text-mkNavy-400 mb-6\">\n {title}\n </Heading>\n )}\n\n {body && <div className=\"mb-8\">{body}</div>}\n\n <div className=\"flex flex-col gap-4 sm:flex-row sm:gap-6\">\n {button1 && <Button {...button1} />}\n {button2 && <Button {...button2} />}\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default SideBySide;\n","import { InferContentfulResponse } from '@/component-library-lib/dataSource/contentful/helpers';\nimport { Topics } from '@/component-library-lib/dataSource/contentful/models/topics';\nimport { anchorTarget } from '@/component-library-lib/utils/anchorTarget';\nimport { addHttps } from '@/component-library-lib/utils/stringReplace/common';\nimport { IButton } from '@/component-library/atoms/Button/Button';\nimport Paragraph from '@/component-library/atoms/Paragraph/Paragraph';\nimport PageWrapper from '@/component-library/organisms/PageWrapper/PageWrapper';\nimport SideBySide from '@/component-library/organisms/SideBySide/SideBySide';\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\nimport { BLOCKS, INLINES } from '@contentful/rich-text-types';\n\n/**\n * SideBySideContainerProps\n *\n * @typedef SideBySideContainerProps\n */\ntype SideBySideContainerProps = InferContentfulResponse<\n Topics['SideBySide']\n> & {\n /** Classname */\n className?: string;\n};\n\n/**\n * @param {SideBySideContainerProps} props - SideBySideContainerProps\n * @returns {React.ReactNode} - SideBySideContainer\n */\nexport const SideBySideContainer = (props: SideBySideContainerProps) => {\n const button1 = props.fields.actionLink1\n ? ({\n children: props.fields.actionLink1?.fields?.label,\n color: 'primary',\n size: 'md',\n type: 'button',\n href: props.fields.actionLink1?.fields?.url,\n newTab:\n props.fields.actionLink1?.fields?.target === '_blank' ? true : false,\n } as IButton)\n : undefined;\n\n const button2 = props.fields.actionLink2\n ? ({\n children: props.fields.actionLink2?.fields?.label,\n color: 'secondary',\n size: 'md',\n type: 'button',\n href: props.fields.actionLink2?.fields?.url,\n newTab:\n props.fields.actionLink2?.fields?.target === '_blank' ? true : false,\n } as IButton)\n : undefined;\n\n return (\n <PageWrapper classes=\"page-max-w px-6 sm:px-8 md:px-10\">\n <SideBySide\n title={documentToReactComponents(props.fields?.headline, {\n renderMark: {\n /**\n * Bold\n *\n * @param {string} text - The text to be bolded\n * @returns {React.ReactElement} Component\n */\n bold: (text) => <strong className=\"font-petco\">{text}</strong>,\n },\n renderNode: {\n /**\n * Embedded Asset\n *\n * @param {object} _ - The node\n * @param {string} children - The children\n * @returns {React.ReactNode} - Image Component\n */\n [BLOCKS.PARAGRAPH]: (_, children) => (\n <span className=\"text-inherit\">{children}</span>\n ),\n },\n })}\n body={documentToReactComponents(props.fields.copyRichText, {\n renderNode: {\n /**\n * @param {object} _ - The node\n * @param {React.ReactNode} children - The children\n * @returns {React.ReactNode} - Paragraph Component\n */\n [BLOCKS.PARAGRAPH]: (_, children) => (\n <Paragraph size=\"body3\" font=\"petco\" className=\"mb-4\">\n {children}\n </Paragraph>\n ),\n /**\n * @param {object} node - Node Data\n * @param {object} node.data - Node Data\n * @param {React.ReactNode} children - Node Children Tree\n * @returns {React.ReactNode | void} - ReactNode\n */\n [INLINES.HYPERLINK]: ({ data }, children) => {\n return anchorTarget(data.uri, children);\n },\n },\n renderMark: {\n /**\n * @param {string} text - The text to render\n * @returns {React.ReactNode} - The bold text\n */\n bold: (text) => <span className=\"font-bold\">{text}</span>,\n\n /**\n * @param {string} text - The text to render\n * @returns {React.ReactNode} - The italicized text\n */\n italic: (text) => <span className=\"font-light italic\">{text}</span>,\n },\n })}\n image={{\n url: addHttps(props.fields.image?.fields.file?.url),\n alt: props.fields.image?.fields.description,\n width: props.fields.image?.fields.file?.details.image?.width || 560,\n height: props.fields.image?.fields.file?.details.image?.height || 430,\n }}\n button1={button1}\n button2={button2}\n imagePosition={props.fields.imagePosition}\n />\n </PageWrapper>\n );\n};\n","import { accentProps } from '@/component-library-lib/constants/accents';\nimport { useAccent } from '@/component-library-lib/hooks/accentContext/AccentContext';\nimport AnimateItem from '@/component-library/atoms/AnimateItem/AnimateItem';\nimport ButtonLink from '@/component-library/atoms/ButtonLink/ButtonLink';\nimport ContentfulImage from '@/component-library/atoms/ContentfulImage/ContentfulImage';\nimport Heading from '@/component-library/atoms/Heading/Heading';\nimport Paragraph from '@/component-library/atoms/Paragraph/Paragraph';\nimport clsx from 'clsx';\nimport { HTMLAttributeAnchorTarget } from 'react';\n\n/**\n * ISplitContent\n *\n * @interface ISplitContent\n */\nexport interface ISplitContent {\n /**\n * The overline text to display\n *\n * @memberof ISplitContent\n * @member {string} overline\n */\n overline: string;\n /**\n * The headline text to display\n *\n * @memberof ISplitContent\n * @member {React.ReactNode} headline\n */\n headline: React.ReactNode;\n /**\n * The copy to display\n *\n * @memberof ISplitContent\n * @member {string | React.ReactNode} copy\n */\n copy: string | React.ReactNode;\n /**\n * The image src\n *\n * @memberof ISplitContent\n * @member {string} imageSrc\n */\n imageSrc: string;\n /**\n * The image alt\n *\n * @memberof ISplitContent\n * @member {string} [imageAlt]\n */\n imageAlt?: string;\n /**\n * The link url\n *\n * @memberof ISplitContent\n * @member {'Left' | 'Right'} orientation\n */\n orientation: 'Left' | 'Right';\n /**\n * The button\n *\n * @memberof ISplitContent\n * @member {object} [button]\n */\n button?: {\n /**\n * The label of the button\n *\n * @memberof ISplitContent.button\n * @member {string} label\n */\n label: string;\n /**\n * The url of the button\n *\n * @memberof ISplitContent.button\n * @member {string} url\n */\n url: string;\n /**\n * The target window or frame that the linked document will open in.\n *\n * @memberof ISplitContent.button\n * @member {'_blank' | '_self' | '_parent' | '_top'} [target]\n */\n target?: HTMLAttributeAnchorTarget;\n /**\n * The alternate text to display when the image cannot be displayed.\n *\n * @memberof ISplitContent.button\n * @member {string} [altTitle]\n */\n altTitle?: string;\n };\n /**\n * The background color\n *\n * @memberof ISplitContent\n * @member {string} [background]\n */\n background?: string;\n}\n\n/**\n * SplitContent Content with media side by side\n *\n * @param {ISplitContent} props - The props for the SplitContent component\n * @returns {React.FC<ISplitContent>} Component\n */\nconst SplitContent: React.FC<ISplitContent> = ({\n overline,\n headline,\n copy,\n imageSrc,\n imageAlt = 'Image',\n orientation,\n button,\n background,\n}) => {\n const { accent } = useAccent();\n\n return (\n <div\n data-testid=\"split-content\"\n style={{\n background: `linear-gradient(${\n orientation === 'Left' ? 'to right' : 'to left'\n }, ${background} 0%, ${background} 50%, transparent 50%, transparent 100%)`,\n }}\n >\n <div\n className={clsx(\n 'flex flex-wrap items-stretch md:mx-auto md:px-0',\n orientation === 'Left' && 'flex-row-reverse'\n )}\n >\n <div className=\"w-full md:w-2/4 lg:relative\">\n <div\n className={clsx(\n 'half-screen-width',\n orientation === 'Right' && 'no-reverse'\n )}\n >\n <ContentfulImage\n src={imageSrc}\n alt={imageAlt}\n layout=\"responsive\"\n width={700}\n height={700}\n objectFit=\"cover\"\n />\n </div>\n </div>\n <div\n className=\"w-full md:w-2/4 px-6 sm:px-8 pt-6 sm:pt-12 pb-16 sm:pb-20 lg:px-12 flex items-center xl:px-24\"\n style={{ backgroundColor: background }}\n >\n <AnimateItem from={{ translateY: 20 }}>\n <Paragraph\n size=\"body3\"\n className=\"mb-1 sm:mb-5 lg:mb-3 text-neutral-700\"\n >\n {overline}\n </Paragraph>\n <Heading size=\"h2\" className=\"mb-4 lg:mb-6 [&>*]:text-mkNavy-400\">\n {headline}\n </Heading>\n <div\n className={clsx(\n 'mb-6 lg:mb-8 text-body3',\n accent === accentProps.CARE || accent === accentProps.ORG\n ? 'font-petco'\n : 'font-amasis',\n 'rich-text-with-links'\n )}\n >\n {copy}\n </div>\n {button && (\n <ButtonLink\n variant={\n accent === accentProps.ADOPT\n ? 'pink'\n : accent === accentProps.CARE\n ? 'lightBlue'\n : 'light'\n }\n href={button.url}\n alt={button.altTitle}\n target={button.target}\n >\n {button.label}\n </ButtonLink>\n )}\n </AnimateItem>\n </div>\n </div>\n </div>\n );\n};\n\nexport default SplitContent;\n","import { addHttps } from '@/component-library-lib/utils/stringReplace/common';\nimport { renderBreakLine } from '@/component-library-lib/utils/stringReplace/renderBreakLine';\nimport SplitContent from '@/component-library/organisms/SplitContent/SplitContent';\nimport {\n Options,\n documentToReactComponents,\n} from '@contentful/rich-text-react-renderer';\nimport { BLOCKS } from '@contentful/rich-text-types';\nimport { InferContentfulResponse } from '@/component-library-lib/dataSource/contentful/helpers';\nimport { Topics } from '@/component-library-lib/dataSource/contentful/models/topics';\n\n/**\n * Render Options\n *\n * @constant\n */\nconst renderOptions: Options = {\n renderNode: {\n /**\n * Embedded Asset\n *\n * @param {object} _ - The node\n * @param {React.ReactNode} children - The children\n * @returns {React.ReactElement} - Image Component\n */\n [BLOCKS.PARAGRAPH]: (_, children) => (\n <p className=\"text-neutral-800 mb-6 lg:mb-8 md:line-clamp-6 lg:line-clamp-[20] text-body3\">\n {children}\n </p>\n ),\n },\n renderText: renderBreakLine,\n};\n\n/**\n * SplitContentContainerProps\n *\n * @typedef SplitContentContainerProps\n */\ntype SplitContentContainerProps = InferContentfulResponse<\n Topics['SplitContent']\n>;\n\n/**\n * @param {SplitContentContainerProps} props - SplitContentContainerProps\n * @returns {React.ReactNode} - SplitContentContainer\n */\nexport const SplitContentContainer = (props: SplitContentContainerProps) => {\n const button = props.fields.actionLink\n ? {\n label: props.fields.actionLink.fields.label,\n url: props.fields.actionLink.fields.url,\n target: props.fields.actionLink.fields.target,\n altTitle: props.fields.actionLink.fields.altTitle,\n }\n : undefined;\n\n return (\n <SplitContent\n overline={props.fields.overline}\n headline={documentToReactComponents(props.fields.headline, {\n renderMark: {\n /**\n * Bold\n *\n * @param {string} text - The text to be bolded\n * @returns {React.ReactElement} Component\n */\n bold: (text) => (\n <span className=\"font-bold text-mkNavy-400\">{text}</span>\n ),\n /**\n * Italic\n *\n * @param {string} text - The text to be italicized\n * @returns {React.ReactElement} Component\n */\n italic: (text) => (\n <span className=\"font-light font-amasis italic text-mkNavy-400\">\n {text}\n </span>\n ),\n },\n })}\n copy={\n props.fields.copyRichText\n ? documentToReactComponents(props.fields.copyRichText, renderOptions)\n : props.fields.copy\n }\n imageSrc={addHttps(props.fields.media?.fields.file?.url)}\n imageAlt={props.fields.media?.fields.title}\n orientation={props.fields.orientation}\n button={button}\n background={props.fields.background}\n />\n );\n};\n","import Paragraph from '@/component-library/atoms/Paragraph/Paragraph';\nimport Image from 'next/legacy/image';\nimport React from 'react';\nimport CountUp from 'react-countup';\nimport { useInView } from 'react-intersection-observer';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * IStatTickerCard\n *\n * @interface\n */\nexport interface IStatTickerCard {\n /** The number to begin the display. */\n numberStart: number;\n /** The number to finish display. */\n numberEnd: number;\n /** The prefix to display. */\n prefix: string;\n /** The postfix to display. */\n postfix: string;\n /** The image to display. */\n image: string;\n /** The width of the image. */\n imageWidth: number;\n /** The height of the image. */\n imageHeight: number;\n /** The description to display. */\n description: string | React.ReactNode;\n /**\n * The optional classes to apply to the component.\n *\n * @default ''\n */\n className?: string;\n}\n\n/**\n * StatTickerCard Displays an image, title and description. Description is\n * passed in as either a string or a React Node so things like text with links\n * can be passed in\n *\n * @param {IStatTickerCard} props - The props for the StatTickerCard component\n * @returns {React.FC<IStatTickerCard>} StatTickerCard Component\n */\nconst StatTickerCard: React.FC<IStatTickerCard> = ({\n numberStart,\n numberEnd,\n prefix,\n postfix,\n image,\n imageWidth,\n imageHeight,\n description,\n className = '',\n}) => {\n const [ref, inView] = useInView({\n threshold: 0.6,\n triggerOnce: true,\n });\n\n return (\n <div\n data-testid=\"stat-ticker-card\"\n className={twMerge('stat-ticker-card', className)}\n ref={ref}\n >\n <div className=\"text-center relative h-full flex flex-col justify-center min-h-[156px]\">\n <div className=\"relative w-full\">\n {image && (\n <Image\n src={image}\n loading=\"lazy\"\n width={imageWidth}\n height={imageHeight}\n alt={`${description} image`}\n />\n )}\n </div>\n <div className=\"absolute w-full z-0\">\n <CountUp\n start={numberStart}\n end={inView ? numberEnd : 0}\n duration={4}\n separator=\".\"\n decimals={Number.isInteger(numberEnd) ? 0 : 2}\n decimal=\".\"\n prefix={prefix}\n suffix={postfix}\n useEasing={true}\n >\n {({ countUpRef }) => (\n <span\n className=\"text-display2 text-base-400 mb-2 font-petco font-bold\"\n ref={countUpRef}\n />\n )}\n </CountUp>\n <Paragraph size=\"body3\">{description}</Paragraph>\n </div>\n </div>\n </div>\n );\n};\n\nexport default StatTickerCard;\n","import { addHttps } from '@/component-library-lib/utils/stringReplace/common';\nimport StatTickerCard from '@/component-library/molecules/StatTickerCard/StatTickerCard';\nimport { InferContentfulResponse } from '@/component-library-lib/dataSource/contentful/helpers';\nimport { Topics } from '@/component-library-lib/dataSource/contentful/models/topics';\n\n/**\n * StatsTicketContainerProps\n *\n * @typedef StatsTicketContainerProps\n */\ntype StatsTicketContainerProps = InferContentfulResponse<\n Topics['StatsTicker']\n> & {\n /** Classname */\n className?: string;\n};\n\n/**\n * @param {StatsTicketContainerProps} props - StatsTickerContainerProps\n * @returns {React.ReactNode} - StatsTickerContainer\n */\nexport const StatsTickerContainer = (props: StatsTicketContainerProps) => {\n return (\n <StatTickerCard\n description={props.fields.description}\n image={addHttps(props.fields.ellipse?.fields.file?.url)}\n imageHeight={\n props.fields.ellipse?.fields.file?.details.image?.height ?? 0\n }\n imageWidth={props.fields.ellipse?.fields.file?.details.image?.width ?? 0}\n numberStart={props.fields.numberStart}\n numberEnd={props.fields.numberEnd}\n prefix={props.fields.prefix}\n postfix={props.fields.postfix}\n className={props.className}\n />\n );\n};\n","import ContentfulImage from '@/component-library/atoms/ContentfulImage/ContentfulImage';\nimport Heading from '@/component-library/atoms/Heading/Heading';\nimport Paragraph from '@/component-library/atoms/Paragraph/Paragraph';\nimport Link from 'next/link';\nimport { HTMLAttributeAnchorTarget } from 'react';\n\n/**\n * ITeamCard\n *\n * @interface ITeamCard\n */\nexport interface ITeamCard {\n /**\n * Name of the Team Card\n *\n * @memberof ITeamCard\n * @member {string} name\n */\n name: string;\n /**\n * Title of the Team Card\n *\n * @memberof ITeamCard\n * @member {string} title\n */\n title: string;\n /**\n * The Image of the Team Card\n *\n * @memberof ITeamCard\n * @member {string} image\n */\n image: string;\n /**\n * The alt of the Team Card\n *\n * @memberof ITeamCard\n * @member {string} [alt]\n */\n alt?: string;\n /**\n * The label of the Team Card\n *\n * @memberof ITeamCard\n * @member {string} [label]\n */\n label?: string;\n /**\n * Url of the Team Card\n *\n * @memberof ITeamCard\n * @default '#'\n * @member {string} [url]\n */\n url?: string;\n /**\n * The optional target of the Card\n *\n * @memberof ITeamCard\n * @default '_self'\n * @member {HTMLAttributeAnchorTarget} [target]\n */\n target?: HTMLAttributeAnchorTarget;\n}\n\n/**\n * TeamCard\n *\n * @param {ITeamCard} props - The props for the TeamCard component\n * @returns {React.FC<ITeamCard>} Component\n */\nconst TeamCard: React.FC<ITeamCard> = ({\n name,\n title,\n label,\n alt,\n image,\n url = '#',\n target = '_self',\n}) => {\n return (\n <div data-testid=\"team-card\" className=\"w-full\">\n <Link href={url} aria-label={label} className=\"group\" target={target}>\n {image && (\n <div className=\"aspect-square relative rounded-[20px] overflow-hidden mb-6\">\n <ContentfulImage\n data-testid=\"feature-card-image\"\n src={image}\n layout=\"fill\"\n alt={alt || title}\n objectFit=\"cover\"\n className=\"scale-100 aspect-square group-hover:scale-[102%] transition-transform duration-100\"\n />\n </div>\n )}\n <div className=\"w-full text-center\">\n <Heading size=\"h5\" font=\"petco\" className=\"text-mkNavy-400 mb-2\">\n {name}\n </Heading>\n\n <Paragraph size=\"body4\" font=\"amasis\">\n {title}\n </Paragraph>\n </div>\n </Link>\n </div>\n );\n};\n\nexport default TeamCard;\n","import { addHttps } from '@/component-library-lib/utils/stringReplace/common';\nimport TeamCard from '@/component-library/molecules/TeamCard/TeamCard';\nimport { InferContentfulResponse } from '@/component-library-lib/dataSource/contentful/helpers';\nimport { Topics } from '@/component-library-lib/dataSource/contentful/models/topics';\n\n/**\n * TeamCardContainerProps\n *\n * @typedef TeamCardContainerProps\n */\ntype TeamCardContainerProps = InferContentfulResponse<Topics['TeamCard']>;\n\n/**\n * @param {TeamCardContainerProps} props - TeamCardContainer props\n * @returns {React.ReactNode} - TeamCardContainer component\n */\nexport const TeamCardContainer = (props: TeamCardContainerProps) => (\n <TeamCard\n name={props.fields.name}\n title={props.fields.title}\n image={addHttps(props.fields.image?.fields.file?.url)}\n url={props.fields.actionLink?.fields.url}\n label={props.fields.actionLink?.fields.label}\n target={props.fields.actionLink?.fields.target}\n alt={props.fields.altTitle}\n />\n);\n","import AnimateItem from '@/component-library/atoms/AnimateItem/AnimateItem';\nimport PageWrapper from '@/component-library/organisms/PageWrapper/PageWrapper';\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\nimport { InferContentfulResponse } from '@/component-library-lib/dataSource/contentful/helpers';\nimport { Topics } from '@/component-library-lib/dataSource/contentful/models/topics';\n\n/**\n * TextBannerContainerProps\n *\n * @typedef TextBannerContainerProps\n */\ntype TextBannerContainerProps = InferContentfulResponse<Topics['TextBanner']>;\n\n/**\n * The container for the Text Banner\n *\n * @param {TextBannerContainerProps} props - The props for the Text Banner\n * @returns {React.ReactNode} - The Text Banner\n */\nexport function TextBannerContainer(props: TextBannerContainerProps) {\n return (\n <PageWrapper classes=\"page-max-w\">\n <AnimateItem from={{ translateY: 50 }} delay={0.4}>\n <div className=\"bg-base-100 rounded-3xl\">\n <div className=\"mx-auto font-bold [&>p]:text-mkNavy-400 [&>p>a]:text-base-400 text-center text-xl md:text-2xl p-8 sm:px-16 md:px-[232px]\">\n {documentToReactComponents(props.fields.text)}\n </div>\n </div>\n </AnimateItem>\n </PageWrapper>\n );\n}\n","import { InferContentfulResponse } from '@/component-library-lib/dataSource/contentful/helpers';\nimport { Topics } from '@/component-library-lib/dataSource/contentful/models/topics';\nimport { Widget } from '@typeform/embed-react';\n\n/**\n * TypeFormContainerProps\n *\n * @typedef TypeFormContainerProps\n */\ntype TypeFormContainerProps = InferContentfulResponse<Topics['TypeForm']>;\n\n/**\n * @param {TypeFormContainerProps} props - TypeFormContainer props\n * @returns {React.ReactNode} - TypeFormContainer\n */\nexport const TypeFormContainer = (props: TypeFormContainerProps) => {\n return (\n <div data-testid=\"typeform-container\">\n <Widget\n id={props.fields.formId}\n className=\"md:h-screen\"\n autoResize={true}\n inlineOnMobile={true}\n />\n </div>\n );\n};\n","import AnimateItem from '@/component-library/atoms/AnimateItem/AnimateItem';\nimport DisplayText from '@/component-library/molecules/DisplayText/DisplayText';\nimport FeatureCard, {\n IFeatureCard,\n} from '@/component-library/molecules/FeatureCard/FeatureCard';\nimport PageWrapper from '@/component-library/organisms/PageWrapper/PageWrapper';\nimport clsx from 'clsx';\n\n/**\n * IUnevenCard\n *\n * @interface\n */\nexport interface IUnevenCard {\n /** The overline string */\n overline?: string;\n /** The headline richText */\n headline: React.ReactNode;\n /** The array of featured cards */\n featureCardAcross: IFeatureCard[];\n}\n\n/**\n * UnevenCard A group of uneven cards\n *\n * @param {IUnevenCard} props - The props for the UnevenCard component\n * @returns {React.FC<IUnevenCard>} Component\n */\nconst UnevenCard: React.FC<IUnevenCard> = ({\n overline,\n headline,\n featureCardAcross,\n}) => {\n const [featureCardLeft, featureCardMiddle, featureCardRight] =\n featureCardAcross;\n\n return (\n <div data-testid=\"uneven-card\">\n <PageWrapper classes=\"page-max-w\">\n {(overline || headline) && (\n <DisplayText\n classes=\"mx-auto md:translate-y-14 max-w-[446px] lg:max-w-[432px] text-center mb-16 md:mb-0 py-0 sm:py-0 md:py-0\"\n overline={overline}\n heading={headline}\n />\n )}\n <div className=\"grid md:grid-cols-3 gap-10 sm:gap-12 md:gap-8 mb-16 sm:mb-20 md:mb-28\">\n {[featureCardLeft, featureCardMiddle, featureCardRight].map(\n (card, idx) => {\n return (\n <AnimateItem\n key={idx}\n className={clsx({\n 'md:pt-32': card === featureCardMiddle,\n })}\n from={{ translateY: 20 }}\n delay={(idx * 3) / 10}\n >\n {card && <FeatureCard key={`card-item-${idx}`} {...card} />}\n </AnimateItem>\n );\n }\n )}\n </div>\n </PageWrapper>\n </div>\n );\n};\n\nexport default UnevenCard;\n","import { addHttps } from '@/component-library-lib/utils/stringReplace/common';\nimport { IFeatureCard } from '@/component-library/molecules/FeatureCard/FeatureCard';\nimport UnevenCard from '@/component-library/organisms/UnevenCard/UnevenCard';\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\nimport { InferContentfulResponse } from '@/component-library-lib/dataSource/contentful/helpers';\nimport { Topics } from '@/component-library-lib/dataSource/contentful/models/topics';\n\n/**\n * UnevenCardContainerProps\n *\n * @typedef UnevenCardContainerProps\n */\ntype UnevenCardContainerProps = InferContentfulResponse<Topics['UnevenCard']>;\n\n/**\n * @param {UnevenCardContainerProps} props - The props for the UnevenCard\n * @returns {React.ReactNode} - The UnevenCards\n */\nexport const UnevenCardContainer = (props: UnevenCardContainerProps) => {\n const { overline, headline, featureCardAcross } = props.fields;\n\n const cards = featureCardAcross.map((item) => {\n return {\n category: item?.fields.overline,\n title: item?.fields.headline,\n copy: item?.fields.copy,\n image: addHttps(item?.fields.image?.fields.file?.url),\n url: item?.fields.actionLink?.fields.url || '',\n label: item?.fields.actionLink?.fields.label || '',\n target: item?.fields.actionLink?.fields.target,\n };\n }) as IFeatureCard[];\n\n return (\n <UnevenCard\n overline={overline}\n headline={documentToReactComponents(headline, {\n renderMark: {\n /**\n * Bold\n *\n * @param {string} text - The text to be bolded\n * @returns {React.ReactElement} Component\n */\n bold: (text) => (\n <strong className=\"text-mkPurple-400 font-petco\">{text}</strong>\n ),\n },\n })}\n featureCardAcross={cards}\n />\n );\n};\n","import contentFulImageLoader from '@/component-library-lib/loaders/contentfulImageLoader';\nimport { addHttps } from '@/component-library-lib/utils/stringReplace/common';\nimport AnimateItem from '@/component-library/atoms/AnimateItem/AnimateItem';\nimport PageWrapper from '@/component-library/organisms/PageWrapper/PageWrapper';\nimport VideoPlayer from '@/component-library/organisms/VideoPlayer/VideoPlayer';\nimport { InferContentfulResponse } from '@/component-library-lib/dataSource/contentful/helpers';\nimport { Topics } from '@/component-library-lib/dataSource/contentful/models/topics';\n\n/**\n * VideoPlayerContainerProps\n *\n * @typedef VideoPlayerContainerProps\n */\ntype VideoPlayerContainerProps = InferContentfulResponse<\n Topics['VideoPlayer']\n> & {\n /** The className */\n className?: string;\n};\n\n/**\n * @param {VideoPlayerContainerProps} props - VideoPlayerContainerProps\n * @returns {React.ReactNode} - VideoPlayerContainer\n */\nexport const VideoPlayerContainer = (props: VideoPlayerContainerProps) => (\n <PageWrapper classes=\"page-max-w\">\n <AnimateItem from={{ translateY: 50 }} delay={0.4}>\n <VideoPlayer\n classes={props.className}\n title={props.fields.title}\n video={props.fields.videoUrl}\n alt={props.fields.alt}\n muted={!!props.fields.muted}\n image={addHttps(props.fields.image?.fields.file?.url)}\n loader={contentFulImageLoader}\n />\n </AnimateItem>\n </PageWrapper>\n);\n","import { ActionLinkContainer } from '@/component-library-lib/dataSource/contentful/containers/ActionLinkContainer/ActionLinkContainer';\nimport AnimateItem from '@/component-library/atoms/AnimateItem/AnimateItem';\nimport Heading from '@/components/atoms/Heading/Heading';\nimport PageWrapper from '@/components/organisms/PageWrapper/PageWrapper';\nimport { assemblyFactory } from '@/lib/dataSource/contentful/assemblyFactory';\nimport { ContainerProps } from '@/lib/dataSource/contentful/containers';\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\nimport clsx from 'clsx';\n\nconst topPaddingValues = {\n none: '',\n xsmall: 'pt-12',\n small: 'pt-16',\n medium: 'pt-20',\n large: 'pt-28',\n default: 'pt-16 sm:pt-20 md:pt-28',\n};\n\nconst bottomPaddingValues = {\n none: '',\n xsmall: 'pb-12',\n small: 'pb-16',\n medium: 'pb-20',\n large: 'pb-28',\n default: 'pb-16 sm:pb-20 md:pb-28',\n};\n\n/**\n * @param {object} props - BlockContainer props\n * @returns {React.ReactNode} - BlockContainer component\n */\nexport const BlockContainer = (props: ContainerProps['block']) => {\n const columnsTablet =\n props.fields.columnsTablet === 'Auto'\n ? props.fields.elements?.length\n : props.fields.columnsTablet;\n\n const columnsDesktop =\n props.fields.columnsDesktop === 'Auto'\n ? props.fields.elements?.length\n : props.fields.columnsDesktop;\n\n const backgroundColor = props.fields.background;\n\n const topPadding = props.fields.topPadding;\n const bottomPadding = props.fields.bottomPadding;\n const keepPadding = props.fields.keepPadding;\n\n return (\n <div\n style={{\n backgroundColor,\n }}\n className=\"block-container overflow-hidden\"\n data-testid=\"block-container\"\n >\n <PageWrapper\n classes={clsx(\n 'page-max-w',\n keepPadding &&\n !topPadding &&\n !bottomPadding &&\n 'py-16 sm:py-20 md:py-28',\n topPadding && topPaddingValues[topPadding],\n bottomPadding && bottomPaddingValues[bottomPadding]\n )}\n >\n {props.fields.headline && (\n <div\n className={clsx(\n 'flex flex-col md:flex-row mb-6 md:mb-16 items-start md:items-end',\n props.fields.actionLinkOrientation === 'Left'\n ? 'flex-row-reverse'\n : 'flex-row'\n )}\n >\n <div\n className={clsx(\n 'flex-grow',\n !!props.fields.actionLink &&\n props.fields.actionLinkOrientation === 'Left'\n ? 'text-right'\n : !props.fields.actionLink\n ? 'text-center w-full'\n : 'text-left'\n )}\n >\n {props.fields.headline && (\n <AnimateItem from={{ translateY: 20 }}>\n <Heading\n size=\"h2\"\n font=\"petco\"\n className=\"text-mkNavy-400 [&>*]:text-mkNavy-400 mb-6\"\n >\n {documentToReactComponents(props.fields.headline)}\n </Heading>\n </AnimateItem>\n )}\n {props.fields.copy && (\n <AnimateItem\n from={{ translateY: 20 }}\n delay={0.4}\n className=\"[&>*]:text-lg max-w-5xl mb-6 md:mb-0\"\n >\n {documentToReactComponents(props.fields.copy)}\n </AnimateItem>\n )}\n </div>\n {props.fields.actionLink && (\n <div>\n <ActionLinkContainer {...props.fields.actionLink} />\n </div>\n )}\n </div>\n )}\n <div\n data-testid=\"block-elements-container\"\n className={`grid sm:grid-cols-${columnsTablet} md:grid-cols-${columnsDesktop} gap-10 sm:gap-12 md:gap-8`}\n >\n {assemblyFactory.createBlockElements(props.fields.elements)}\n </div>\n </PageWrapper>\n </div>\n );\n};\n","import AnimateItem from '@/component-library/atoms/AnimateItem/AnimateItem';\nimport Heading from '@/components/atoms/Heading/Heading';\nimport Paragraph from '@/components/atoms/Paragraph/Paragraph';\nimport Carousel from '@/components/organisms/Carousel/Carousel';\nimport PageWrapper from '@/components/organisms/PageWrapper/PageWrapper';\nimport { assemblyFactory } from '@/lib/dataSource/contentful/assemblyFactory';\nimport { ContainerProps } from '@/lib/dataSource/contentful/containers';\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\nimport { twMerge } from 'tailwind-merge';\n\n/** Props for the CarouselContainer component */\ntype CarouselContainerProps =\n /** The props for the Carousel */\n ContainerProps['carousel'] & {\n /** Classname for the container */\n className?: string;\n /** To hide the slider dots */\n hideDots?: boolean;\n };\n\n/**\n * @param {CarouselContainerProps} props - CarouselContainerProps\n * @returns {React.ReactNode} - CarouselContainer component\n */\nexport const CarouselContainer = (props: CarouselContainerProps) => {\n const backgroundColor = props.fields.background;\n\n return (\n <div\n style={{\n backgroundColor,\n }}\n >\n <PageWrapper\n classes={twMerge('py-12', props.className)}\n >\n <div className=\"flex items-end flex-row\">\n <div className=\"flex-grow text-center\">\n {props.fields.overline && (\n <AnimateItem from={{ translateY: 20 }}>\n <Paragraph\n size=\"body4\"\n font=\"petco\"\n className=\"text-neutral-800 mb-2\"\n >\n {props.fields.overline}\n </Paragraph>\n </AnimateItem>\n )}\n {props.fields.headline && (\n <AnimateItem from={{ translateY: 20 }}>\n <Heading\n size=\"h2\"\n font=\"amasis\"\n className={`text-mkNavy-400 ${\n props.fields.copy ? 'mb-6' : 'mb-8 md:mb-9'\n }`}\n >\n {documentToReactComponents(props.fields.headline, {\n renderMark: {\n /**\n * Bold\n *\n * @param {string} text - The text to be bolded\n * @returns {React.ReactElement} Component\n */\n bold: (text) => (\n <strong className=\"text-mkPurple-400 font-petco\">\n {text}\n </strong>\n ),\n },\n })}\n </Heading>\n </AnimateItem>\n )}\n {props.fields.copy && (\n <AnimateItem from={{ translateY: 20 }} delay={0.4}>\n <div className=\"mb-8 md:mb-9\">\n <Paragraph size=\"body4\" className=\"text-neutral-800\">\n {props.fields.copy}\n </Paragraph>\n </div>\n </AnimateItem>\n )}\n </div>\n </div>\n {props.fields?.elements?.length ? (\n <Carousel\n navigationButtons={{\n verticalOffsetClass: 'top-[calc(50%-110px)]',\n }}\n dotNavigation={{\n dotClass: 'text-base-300 hover:text-base-200',\n fontSizeClass: 'static bottom-auto',\n }}\n >\n {\n assemblyFactory.createBlockElements(\n props.fields.elements,\n false\n ) as React.ReactNode[]\n }\n </Carousel>\n ) : null}\n </PageWrapper>\n </div>\n );\n};\n","/**\n * This function is used to strip the base path off of urls\n *\n * @param {string} url - The url to remove the base path from\n * @returns {string} - The url with the base path removed\n */\nexport const removeBasePath = (url: string): string => {\n const basePath = process.env.NEXT_PUBLIC_BASE_PATH;\n if (basePath && url.startsWith(basePath)) {\n return url.replace(basePath, '');\n }\n return url;\n};\n","import { useOverlay } from '@/component-library-lib/hooks/overlayContext/OverlayContext';\nimport contentFulImageLoader from '@/component-library-lib/loaders/contentfulImageLoader';\nimport AnimateItem from '@/component-library/atoms/AnimateItem/AnimateItem';\nimport { IButton } from '@/components/atoms/Button/Button';\nimport FullWidthCalloutImage from '@/components/organisms/FullWidthCalloutImage/FullWidthCalloutImage';\nimport { ContainerProps } from '@/lib/dataSource/contentful/containers';\nimport { useEventContext } from '@/lib/hooks/analytics/useEventContext';\nimport { removeBasePath } from '@/lib/utils/helpers/stringHelpers/removeBasePath';\nimport { addHttps } from '@/lib/utils/stringReplace/addHttps';\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\n\n/** Action Link Props */\ntype ActionLinkProps = IFullWidthCalloutContainerProps['fields']['actionLink1'];\n\n/** Full Width Callout Container props */\nexport type IFullWidthCalloutContainerProps =\n ContainerProps['fullWidthCalloutImage'] & {\n /** Classname */\n className?: string;\n };\n\n/**\n * @param {IFullWidthCalloutContainerProps} props -\n * FullWidthCalloutContainerProps\n * @returns {React.ReactNode} - FullWidthCalloutContainer\n */\nexport const FullWidthCalloutContainer = (\n props: IFullWidthCalloutContainerProps\n) => {\n const { updateShow } = useOverlay();\n const { setInitiatingComponent } = useEventContext();\n\n /**\n * Handles the click event for the action link.\n *\n * @param {ActionLinkProps} actionLink - The action link object.\n * @returns {void} This function does not return a value.\n */\n const handleOnClick = (\n actionLink: IFullWidthCalloutContainerProps['fields']['actionLink1']\n ) => {\n if (actionLink?.fields?.overlay) {\n updateShow(true);\n }\n\n if (actionLink?.fields?.url?.includes('create-account/start')) {\n setInitiatingComponent('Sign Up Button / All Pages');\n }\n };\n\n const button1 = props.fields.actionLink1\n ? ({\n children: props.fields.actionLink1?.fields?.label,\n color: 'secondary',\n size: 'md',\n type: 'button',\n variant: 'dark',\n href: props.fields.actionLink1?.fields.overlay\n ? undefined\n : removeBasePath(props.fields.actionLink1?.fields?.url),\n target: props.fields.actionLink1?.fields.overlay\n ? undefined\n : props.fields.actionLink1?.fields?.target,\n /**\n * Executes the onClick event handler.\n *\n * @returns {void} This function does not return a value.\n */\n onClick: () => {\n handleOnClick(props.fields.actionLink1);\n },\n } as IButton)\n : undefined;\n\n const button2 = props.fields.actionLink2\n ? ({\n children: props.fields.actionLink2?.fields?.label,\n color: 'secondary',\n size: 'md',\n type: 'button',\n variant: 'dark',\n href: props.fields.actionLink2?.fields.overlay\n ? undefined\n : removeBasePath(props.fields.actionLink2?.fields?.url),\n target: props.fields.actionLink2?.fields.overlay\n ? undefined\n : props.fields.actionLink2?.fields?.target,\n /**\n * Executes the onClick event handler.\n *\n * @returns {void} This function does not return a value.\n */\n onClick: () => {\n handleOnClick(props.fields.actionLink2);\n },\n } as IButton)\n : undefined;\n\n return (\n <FullWidthCalloutImage\n button1={button1}\n button2={button2}\n overline={props.fields.overline}\n body={props.fields.copy}\n bodyRichText={props.fields.copyRichText}\n imageUrl={addHttps(props.fields.image?.fields?.file?.url)}\n title={documentToReactComponents(props.fields?.headline, {\n renderMark: {\n /**\n * Bold\n *\n * @param {string} text - The text to be bolded\n * @returns {React.ReactElement} Component\n */\n bold: (text) => <strong className=\"font-petco\">{text}</strong>,\n },\n })}\n TextWrapper={({ children }) => (\n <AnimateItem delay={0.5} to={{ translateY: -20 }}>\n {children}\n </AnimateItem>\n )}\n loader={contentFulImageLoader}\n />\n );\n};\n","import ContentfulImage from '@/component-library/atoms/ContentfulImage/ContentfulImage';\nimport Button, { IButton } from '@/components/atoms/Button/Button';\nimport Heading from '@/components/atoms/Heading/Heading';\nimport PageWrapper from '@/components/organisms/PageWrapper/PageWrapper';\nimport clsx from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * IGraphicHeroImage The GraphicHero Image component\n *\n * @interface IGraphicHeroImage\n */\nexport interface IGraphicHeroImage {\n /**\n * The URL of the image to display.\n *\n * @memberof IGraphicHeroImage\n * @member {string} url\n */\n url: string;\n /**\n * The alt text to display.\n *\n * @memberof IGraphicHeroImage\n * @member {string} [altTitle]\n */\n altTitle?: string;\n}\n\n/**\n * IGraphicHero\n *\n * @interface IGraphicHero\n */\nexport interface IGraphicHero {\n /**\n * The rich headline to display.\n *\n * @memberof IGraphicHero\n * @member {React.ReactNode | string} richHeadline\n */\n richHeadline: React.ReactNode | string;\n /**\n * The copy text to display below the headline.\n *\n * @memberof IGraphicHero\n * @member {React.ReactNode} [copy]\n */\n copy?: React.ReactNode;\n /**\n * The Background image to display.\n *\n * @memberof IGraphicHero\n * @member {IGraphicHeroImage} featureImage\n */\n featureImage: IGraphicHeroImage;\n /**\n * The optionals buttons to display.\n *\n * @memberof IGraphicHero\n * @member {IButton[]} [buttons]\n */\n buttons?: IButton[];\n /**\n * The optional className.\n *\n * @memberof IGraphicHero\n * @member {string} [className]\n */\n className?: string;\n}\n\n/**\n * GraphicHero A remix of the flexible hero\n *\n * @param {IGraphicHero} props - The props for the GraphicHero component\n * @returns {React.FC<IGraphicHero>} Component\n */\nconst GraphicHero: React.FC<IGraphicHero> = ({\n richHeadline,\n copy,\n featureImage,\n buttons = [],\n className,\n}) => {\n return (\n <div\n data-testid=\"graphic-hero\"\n className={twMerge(\n 'bg-[linear-gradient(278deg,_#dfccf380_-2.69%,_#dfccf3b3_93.82%)] pt-5 pb-12 sm:py-6',\n className\n )}\n >\n <PageWrapper classes=\"page-max-w\">\n <div\n data-testid=\"graphic-hero-wrapper\"\n className=\"grid grid-cols-1 sm:grid-cols-6 md:grid-cols-12 gap-2 sm:gap-6 md:gap-8 items-center\"\n >\n <div className=\"sm:col-span-3 md:col-span-5 md:col-start-2\">\n <Heading size=\"h1\" className=\"mb-3 md:mb-4 [&>*]:text-mkNavy-400\">\n {richHeadline}\n </Heading>\n\n {copy && <div>{copy}</div>}\n\n {buttons.length > 0 && (\n <div\n data-testid=\"hero-buttons\"\n className={clsx(\n 'flex w-full items-center justify-start mt-6 md:mt-8 [&>a]:px-6 [&>button]:px-6 gap-4',\n buttons.length === 2\n ? ''\n : 'sm:[&>a]:px-10 sm:[&>button]:px-10'\n )}\n >\n {buttons.map((ButtonItem, index) => (\n <Button\n key={index}\n {...ButtonItem}\n className={clsx(\n buttons.length === 2\n ? 'w-auto min-w-[9.5rem]'\n : 'w-full sm:w-auto'\n )}\n />\n ))}\n </div>\n )}\n </div>\n <div className=\"-order-1 sm:order-2 sm:col-span-3 md:col-span-5\">\n {featureImage.url && (\n <div className=\"w-full aspect-square\">\n <ContentfulImage\n src={featureImage.url}\n alt={featureImage.altTitle}\n layout=\"responsive\"\n width={548}\n height={548}\n priority={true}\n className=\"object-cover\"\n data-testid=\"graphic-hero-image\"\n />\n </div>\n )}\n </div>\n </div>\n </PageWrapper>\n </div>\n );\n};\n\nexport default GraphicHero;\n","import { anchorTarget } from '@/component-library-lib/utils/anchorTarget';\nimport { renderBreakLine } from '@/component-library-lib/utils/stringReplace/renderBreakLine';\nimport { IButton } from '@/components/atoms/Button/Button';\nimport GraphicHero from '@/components/organisms/GraphicHero/GraphicHero';\nimport { IHomePageTemplateContent } from '@/components/templates/HomePageTemplate/HomePageTemplate';\nimport { ContainerProps } from '@/lib/dataSource/contentful/containers';\nimport { useEventContext } from '@/lib/hooks/analytics/useEventContext';\nimport { useUserContext } from '@/lib/hooks/userContext/UserContext';\nimport { startPetSearchEventHandler } from '@/lib/utils/analytics/startPetSearch';\nimport CookieStorage from '@/lib/utils/storage/cookie-storage';\nimport { addHttps } from '@/lib/utils/stringReplace/addHttps';\nimport { default as staticContent } from '@/locales/en/pages/HomePageTemplate.json';\nimport { useUser } from '@auth0/nextjs-auth0/client';\nimport {\n documentToReactComponents,\n Options,\n} from '@contentful/rich-text-react-renderer';\nimport { INLINES } from '@contentful/rich-text-types';\nimport { useRouter } from 'next/router';\nimport { ParsedUrlQuery } from 'querystring';\nimport { useEffect } from 'react';\n\n/**\n * The href for the I lost a Pet Button\n *\n * @constant {string}\n */\nconst iLostAPetHref = '/i-lost-a-pet';\n\n/**\n * The href for the I found a Pet Button\n *\n * @constant {string}\n */\nconst iFoundAPetHref = '/i-found-a-pet';\n\n/** The static text used in the page */\nconst content: IHomePageTemplateContent = staticContent.components;\n\n/** The contentful format options for the header */\nconst optionsHeader: Options = {\n renderMark: {\n /**\n * Bold\n *\n * @param {string} text - The text to be bolded\n * @returns {React.ReactElement} Component\n */\n bold: (text) => <span className=\"font-bold text-mkNavy-400\">{text}</span>,\n /**\n * Italic\n *\n * @param {string} text - The text to be italicized\n * @returns {React.ReactElement} Component\n */\n italic: (text) => (\n <span className=\"font-light font-amasis italic text-mkNavy-400\">\n {text}\n </span>\n ),\n },\n};\n\n/** The contentful format options for the copy */\nconst optionsCopy: Options = {\n renderNode: {\n /**\n * @param {object} node - Node Data\n * @param {object} node.data - Node Data\n * @param {React.ReactNode} children - Node Children Tree\n * @returns {React.ReactNode | void} - ReactNode\n */\n [INLINES.HYPERLINK]: ({ data }, children) => {\n return anchorTarget(data.uri, children);\n },\n },\n renderText: renderBreakLine,\n};\n\n/**\n * @param {object} props - HeroContainerProps\n * @returns {React.ReactNode} - HeroContainer\n */\nexport const GraphicHeroContainer = (\n props: ContainerProps['graphicHero'] & {\n /** Classname */\n className?: string;\n }\n) => {\n /**\n * Allows us to lever the useUser hook from Auth0\n *\n * @constant {object} user - The user object from Auth0\n */\n const { user } = useUser();\n\n const { userType } = useUserContext();\n\n /**\n * Whether the user is logged in\n *\n * @constant {boolean} loggedIn - Whether the user is logged in\n */\n const loggedIn = user !== undefined;\n const isShelter = userType === 'shelter';\n\n const { setInitiatingComponent } = useEventContext();\n\n /** The router */\n const router = useRouter();\n\n /**\n * @param {ParsedUrlQuery} query - The query params to clean\n * @returns {ParsedUrlQuery} - The query params without the slug\n */\n const cleanQueryParams = (query: ParsedUrlQuery): ParsedUrlQuery => {\n const queryWithoutSlug = { ...query };\n delete queryWithoutSlug.slug;\n return queryWithoutSlug;\n };\n\n /**\n * @constant {IButton[]} loggedOutButtons - The buttons to display when the\n * user is logged out for the Hero Homepage Component.\n */\n const loggedOutButtons: IButton[] = [\n {\n children: content.hero.buttons.loggedOut.lost,\n size: 'lg',\n variant: 'light',\n color: 'primary',\n onClick:\n /**\n * Handle the click event for the I Lost a Pet Button\n *\n * @returns {void}\n */\n (): void => {\n const initiatingComponent = 'I Lost A Pet Button / Homepage';\n setInitiatingComponent(initiatingComponent);\n\n startPetSearchEventHandler({\n clickText: content.hero.buttons.loggedOut.lost,\n component: initiatingComponent,\n flow: 'Found',\n });\n\n const queryWithoutSlug = cleanQueryParams(router.query);\n\n router.push({\n pathname: iLostAPetHref,\n query: queryWithoutSlug,\n });\n },\n },\n {\n children: content.hero.buttons.loggedOut.found,\n size: 'lg',\n variant: 'light',\n color: 'secondary',\n onClick:\n /**\n * Handle the click event for the I Found a Pet Button\n *\n * @returns {void}\n */\n (): void => {\n const initiatingComponent = 'I Found A Pet Button / Homepage';\n setInitiatingComponent(initiatingComponent);\n\n startPetSearchEventHandler({\n clickText: content.hero.buttons.loggedOut.found,\n component: initiatingComponent,\n flow: 'Lost',\n });\n\n const queryWithoutSlug = cleanQueryParams(router.query);\n\n router.push({\n pathname: iFoundAPetHref,\n query: queryWithoutSlug,\n });\n },\n },\n ];\n\n /**\n * @constant {IButton[]} loggedInUserButtons - The buttons to display when the\n * user is logged in\n */\n const loggedInUserButtons: IButton[] = [\n {\n children: content.hero.buttons.loggedIn.manage,\n size: 'lg',\n variant: 'light',\n color: 'primary',\n href: '/dash',\n },\n ];\n\n /**\n * @constant {IButton[]} loggedInShelterButtons - The buttons to display when\n * the shelter is logged in\n */\n const loggedInShelterButtons: IButton[] = [\n {\n children: 'Dashboard',\n size: 'lg',\n variant: 'light',\n color: 'primary',\n href: '/shelter-dashboard/pets',\n },\n {\n children: content.hero.buttons.loggedOut.found,\n size: 'lg',\n variant: 'light',\n color: 'secondary',\n onClick:\n /**\n * Handle the click event for the I Found a Pet Button\n *\n * @returns {void}\n */\n (): void => {\n const initiatingComponent = 'I Found A Pet Button / Shelter Homepage';\n setInitiatingComponent(initiatingComponent);\n\n startPetSearchEventHandler({\n clickText: content.hero.buttons.loggedOut.found,\n component: initiatingComponent,\n flow: 'Lost',\n });\n const queryWithoutSlug = cleanQueryParams(router.query);\n\n router.push({\n pathname: iFoundAPetHref,\n query: queryWithoutSlug,\n });\n },\n },\n ];\n\n /**\n * Determine what buttons to use on the homepage hero\n *\n * @returns {IButton[]} The buttons to display on the homepage hero\n */\n const heroButtons = (): IButton[] => {\n if (loggedIn) {\n if (isShelter) {\n return loggedInShelterButtons;\n }\n return loggedInUserButtons;\n }\n return loggedOutButtons;\n };\n\n useEffect(() => {\n const cookies = new CookieStorage();\n if (router.query.logout === 'true') {\n localStorage.clear();\n sessionStorage.clear();\n cookies.delete('userType');\n }\n });\n\n return (\n <GraphicHero\n className={props.className}\n richHeadline={documentToReactComponents(\n props.fields.richHeadline,\n optionsHeader\n )}\n copy={documentToReactComponents(props.fields.copy, optionsCopy)}\n featureImage={{\n url: addHttps(props.fields.featureImage?.fields.file?.url),\n altTitle: props.fields.featureImage?.fields.title,\n }}\n buttons={heroButtons()}\n />\n );\n};\n","import CdnImage from '@/component-library/atoms/CdnImage/CdnImage';\nimport Button, { IButton } from '@/components/atoms/Button/Button';\nimport Heading from '@/components/atoms/Heading/Heading';\nimport Paragraph from '@/components/atoms/Paragraph/Paragraph';\n\n/** Background colors */\nconst bgColors = {\n 'base 100': 'bg-base-100',\n 'base 200': 'bg-base-200',\n 'base 300': 'bg-base-300',\n 'base 400': 'bg-base-400',\n};\n\n/**\n * IHeroHomepage Interface for Hero Homepage component\n *\n * @interface IHeroHomepage\n */\nexport interface IHeroHomepage {\n /**\n * The text to display under the title.\n *\n * @memberof IHeroHomepage\n * @member {string} text\n */\n text: string;\n /**\n * The title to display.\n *\n * @memberof IHeroHomepage\n * @member {string | React.ReactNode} title\n */\n title: string | React.ReactNode;\n /**\n * The overline to display.\n *\n * @memberof IHeroHomepage\n * @member {string} [overline]\n */\n overline?: string;\n /**\n * The buttons to display.\n *\n * @memberof IHeroHomepage\n * @member {IButton[]} buttons\n */\n buttons: IButton[];\n /**\n * The background color.\n *\n * @memberof IHeroHomepage\n * @default 'base 100'\n * @member {'base 100' | 'base 200' | 'base 300' | 'base 400'}\n */\n bgColor?: 'base 100' | 'base 200' | 'base 300' | 'base 400';\n}\n\n/**\n * Hero Homepage Homepage Hero Component\n *\n * @param {IHeroHomepage} props - The Hero Homepage props.\n * @returns {React.FC<IHeroHomepage>} Hero Homepage Component\n */\nconst HeroHomepage: React.FC<IHeroHomepage> = ({\n text,\n title,\n overline,\n buttons,\n bgColor = 'base 100',\n}: IHeroHomepage) => {\n /**\n * The background images and classes for the component.\n *\n * @constant\n */\n const collarDesktop =\n process.env.NEXT_PUBLIC_CDN_BASE_URL +\n '/assets/lost/homepage-hero/collar-desktop.svg';\n const collarTablet =\n process.env.NEXT_PUBLIC_CDN_BASE_URL +\n '/assets/lost/homepage-hero/collar-tablet.svg';\n const collarMobile =\n process.env.NEXT_PUBLIC_CDN_BASE_URL +\n '/assets/lost/homepage-hero/collar-mobile.svg';\n const dogRunning =\n process.env.NEXT_PUBLIC_CDN_BASE_URL +\n '/assets/lost/homepage-hero/dog-running.svg';\n\n return (\n <div\n data-testid=\"hero-homepage\"\n className={`flex flex-col h-[calc(100vh-60px)] md:h-[calc(100vh-110px)] min-h-[720px] sm:min-h-[500px] w-full items-center md:justify-center overflow-hidden relative bg-no-repeat bg-contain bg-right-bottom ${bgColors[bgColor]}`}\n >\n <div className=\"text-center mx-auto z-[2] max-w-[664px] w-full px-6 md:mb-0 mt-16 sm:mt-[15vh] md:mt-0\">\n {overline && (\n <Paragraph size=\"overline\" className=\"uppercase mb-2\">\n {overline}\n </Paragraph>\n )}\n <Heading\n size=\"display1\"\n font=\"petco\"\n className=\"mb-4 text-secondaryBase-400 [&>*]:text-secondaryBase-400\"\n >\n {title}\n </Heading>\n <Paragraph size=\"body3\" className=\"font-petco mb-8\">\n {text}\n </Paragraph>\n <div className=\"w-full space-y-4 sm:space-y-0 sm:space-x-4\">\n {buttons.map((ButtonItem, index) => (\n <Button key={index} {...ButtonItem} className=\"w-full sm:w-auto\" />\n ))}\n </div>\n </div>\n <div className=\"hidden md:flex left-[110px] absolute top-[-110px] overflow-hidden z-[1] pointer-events-none\">\n <CdnImage\n src={collarDesktop}\n height={371}\n width={600}\n layout=\"intrinsic\"\n alt=\"Collar\"\n className=\"absolute bottom-0\"\n />\n </div>\n <div className=\"hidden md:flex right-[0] absolute -bottom-2.5 overflow-hidden z-[1] pointer-events-none\">\n <CdnImage\n src={dogRunning}\n height={400}\n width={356}\n layout=\"intrinsic\"\n alt=\"Dog Running\"\n className=\"absolute bottom-0\"\n />\n </div>\n\n <div className=\"hidden md:hidden lg:hidden sm:flex right-0 absolute bottom-[30px] overflow-hidden z-[1] pointer-events-none\">\n <CdnImage\n src={collarTablet}\n height={480}\n width={600}\n layout=\"intrinsic\"\n alt=\"Collar\"\n className=\"absolute bottom-0\"\n />\n </div>\n\n <div className=\"md:hidden lg:hidden sm:hidden right-0 absolute bottom-[30px] overflow-hidden z-[1] pointer-events-none\">\n <CdnImage\n src={collarMobile}\n height={350}\n width={350}\n layout=\"intrinsic\"\n alt=\"Collar\"\n className=\"absolute bottom-0\"\n />\n </div>\n </div>\n );\n};\n\nexport default HeroHomepage;\n","import { IButton } from '@/components/atoms/Button/Button';\nimport HeroHomepage from '@/components/organisms/HeroHomepage/HeroHomepage';\nimport { IHomePageTemplateContent } from '@/components/templates/HomePageTemplate/HomePageTemplate';\nimport { ContainerProps } from '@/lib/dataSource/contentful/containers';\nimport { useEventContext } from '@/lib/hooks/analytics/useEventContext';\nimport { useUserContext } from '@/lib/hooks/userContext/UserContext';\nimport { startPetSearchEventHandler } from '@/lib/utils/analytics/startPetSearch';\nimport CookieStorage from '@/lib/utils/storage/cookie-storage';\nimport { default as staticContent } from '@/locales/en/pages/HomePageTemplate.json';\nimport { useUser } from '@auth0/nextjs-auth0/client';\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\nimport { useRouter } from 'next/router';\nimport { ParsedUrlQuery } from 'querystring';\nimport { useEffect } from 'react';\n\n/** Props for the HeroHomeContainer */\ntype HeroHomeContainerProps = ContainerProps['heroHome'] & {\n /** Class name */\n className?: string;\n};\n\n/**\n * The href for the I lost a Pet Button\n *\n * @constant {string}\n */\nconst iLostAPetHref = '/i-lost-a-pet/';\n\n/**\n * The href for the I found a Pet Button\n *\n * @constant {string}\n */\nconst iFoundAPetHref = '/i-found-a-pet/';\n\n/** The static text used in the page */\nconst content: IHomePageTemplateContent = staticContent.components;\n\n/**\n * @param {HeroHomeContainerProps} props - HeroHomeContainer props\n * @returns {React.ReactNode} - HeroHomeContainer\n */\nexport const HeroHomeContainer = (props: HeroHomeContainerProps) => {\n /**\n * Allows us to lever the useUser hook from Auth0\n *\n * @constant {object} user - The user object from Auth0\n */\n const { user } = useUser();\n\n const { userType } = useUserContext();\n\n /**\n * Whether the user is logged in\n *\n * @constant {boolean} loggedIn - Whether the user is logged in\n */\n const loggedIn = user !== undefined;\n const isShelter = userType === 'shelter';\n\n const { setInitiatingComponent } = useEventContext();\n\n /** The router */\n const router = useRouter();\n\n /**\n * @param {ParsedUrlQuery} query - The query params to clean\n * @returns {ParsedUrlQuery} - The query params without the slug\n */\n const cleanQueryParams = (query: ParsedUrlQuery): ParsedUrlQuery => {\n const queryWithoutSlug = { ...query };\n delete queryWithoutSlug.slug;\n return queryWithoutSlug;\n };\n\n /**\n * @constant {IButton[]} loggedOutButtons - The buttons to display when the\n * user is logged out for the Hero Homepage Component.\n */\n const loggedOutButtons: IButton[] = [\n {\n children: content.hero.buttons.loggedOut.lost,\n size: 'lg',\n variant: 'light',\n color: 'primary',\n onClick:\n /**\n * Handle the click event for the I Lost a Pet Button\n *\n * @returns {void}\n */\n (): void => {\n const initiatingComponent = 'I Lost A Pet Button / Homepage';\n setInitiatingComponent(initiatingComponent);\n\n startPetSearchEventHandler({\n clickText: content.hero.buttons.loggedOut.lost,\n component: initiatingComponent,\n flow: 'Found',\n });\n\n const queryWithoutSlug = cleanQueryParams(router.query);\n\n router.push({\n pathname: iLostAPetHref,\n query: queryWithoutSlug,\n });\n },\n },\n {\n children: content.hero.buttons.loggedOut.found,\n size: 'lg',\n variant: 'light',\n color: 'secondary',\n onClick:\n /**\n * Handle the click event for the I Found a Pet Button\n *\n * @returns {void}\n */\n (): void => {\n const initiatingComponent = 'I Found A Pet Button / Homepage';\n setInitiatingComponent(initiatingComponent);\n\n startPetSearchEventHandler({\n clickText: content.hero.buttons.loggedOut.found,\n component: initiatingComponent,\n flow: 'Lost',\n });\n\n const queryWithoutSlug = cleanQueryParams(router.query);\n\n router.push({\n pathname: iFoundAPetHref,\n query: queryWithoutSlug,\n });\n },\n },\n ];\n\n /**\n * @constant {IButton[]} loggedInUserButtons - The buttons to display when the\n * user is logged in\n */\n const loggedInUserButtons: IButton[] = [\n {\n children: content.hero.buttons.loggedIn.manage,\n size: 'lg',\n variant: 'light',\n color: 'primary',\n href: '/dash/',\n },\n ];\n\n /**\n * @constant {IButton[]} loggedInShelterButtons - The buttons to display when\n * the shelter is logged in\n */\n const loggedInShelterButtons: IButton[] = [\n {\n children: 'Dashboard Home',\n size: 'lg',\n variant: 'light',\n color: 'primary',\n href: '/shelter-dashboard/pets/',\n },\n {\n children: content.hero.buttons.loggedOut.found,\n size: 'lg',\n variant: 'light',\n color: 'secondary',\n onClick:\n /**\n * Handle the click event for the I Found a Pet Button\n *\n * @returns {void}\n */\n (): void => {\n const initiatingComponent = 'I Found A Pet Button / Shelter Homepage';\n setInitiatingComponent(initiatingComponent);\n\n startPetSearchEventHandler({\n clickText: content.hero.buttons.loggedOut.found,\n component: initiatingComponent,\n flow: 'Lost',\n });\n const queryWithoutSlug = cleanQueryParams(router.query);\n\n router.push({\n pathname: iFoundAPetHref,\n query: queryWithoutSlug,\n });\n },\n },\n ];\n\n /**\n * Determine what buttons to use on the homepage hero\n *\n * @returns {IButton[]} The buttons to display on the homepage hero\n */\n const heroButtons = (): IButton[] => {\n if (loggedIn) {\n if (isShelter) {\n return loggedInShelterButtons;\n }\n return loggedInUserButtons;\n }\n return loggedOutButtons;\n };\n\n useEffect(() => {\n const cookies = new CookieStorage();\n if (router.query.logout === 'true') {\n localStorage.clear();\n sessionStorage.clear();\n cookies.delete('userType');\n }\n });\n\n return (\n <HeroHomepage\n title={\n isShelter\n ? \"We're here to help you reunite pets\"\n : documentToReactComponents(props.fields.richHeadline)\n }\n text={\n isShelter\n ? 'Visit your dashboard to manage pets in your care or search for a pet you found in the field.'\n : props.fields.copy\n }\n buttons={heroButtons()}\n bgColor={props.fields.backgroundColor}\n />\n );\n};\n","import ContentfulImage from '@/component-library/atoms/ContentfulImage/ContentfulImage';\nimport Button, { IButton } from '@/components/atoms/Button/Button';\nimport Heading from '@/components/atoms/Heading/Heading';\nimport Paragraph from '@/components/atoms/Paragraph/Paragraph';\nimport clsx from 'clsx';\nimport { useEffect, useState } from 'react';\n\n/**\n * IHeroIllustration\n *\n * @interface IHeroIllustration\n */\nexport interface IHeroIllustration {\n /**\n * The overline text to display.\n *\n * @memberof IHeroIllustration\n * @member {string} [overline]\n */\n overline?: string;\n /**\n * The title slides to display.\n *\n * @memberof IHeroIllustration\n * @member {string | React.ReactNode[]} titleSlides\n */\n titleSlides: string | React.ReactNode[];\n /**\n * The content text to display.\n *\n * @memberof IHeroIllustration\n * @member {string | React.ReactNode} [body]\n */\n body?: React.ReactNode | string;\n /**\n * The button to display.\n *\n * @memberof IHeroIllustration\n * @member {IButton} [button]\n */\n button?: IButton;\n /**\n * The image\n *\n * @memberof IHeroIllustration\n * @member {object} image\n */\n image: {\n /**\n * The image url\n *\n * @memberof IHeroImage\n * @member {string} url\n */\n url: string;\n /**\n * The image alt text\n *\n * @memberof IHeroImage\n * @member {string} [alt]\n */\n alt?: string;\n /**\n * The image width\n *\n * @memberof IHeroImage\n * @member {number} width\n */\n width: number;\n /**\n * The image height\n *\n * @memberof IHeroImage\n * @member {number} height\n */\n height: number;\n };\n /**\n * The optional classes\n *\n * @memberof IHeroIllustration\n * @default ''\n * @member {string} [className]\n */\n className?: string;\n}\n\n/**\n * HeroIllustration A hero with an illustration\n *\n * @param {IHeroIllustration} props - The props for the HeroIllustration\n * component\n * @returns {React.FC<IHeroIllustration>} Component\n */\nconst HeroIllustration: React.FC<IHeroIllustration> = ({\n overline,\n titleSlides,\n body,\n button,\n image,\n className = '',\n}: IHeroIllustration) => {\n const [currentIndex, setCurrentIndex] = useState(0);\n\n useEffect(() => {\n if (titleSlides.length > 1) {\n const interval = setInterval(() => {\n setCurrentIndex((prev) =>\n prev === titleSlides.length - 1 ? 0 : prev + 1\n );\n }, 1500);\n\n return () => {\n clearInterval(interval);\n };\n }\n }, [titleSlides]);\n\n return (\n <div\n data-testid=\"hero-illustration\"\n className={`relative bg-base-100 h-[calc(100vh-60px)] md:h-auto md:min-h-[694px] flex items-center justify-center overflow-hidden md:py-8 ${className}`}\n >\n <div className=\"text-center relative z-10 translate-y-[-110px] sm:translate-y-[-100px] px-6 sm:px-0 md:-translate-y-10 sm:grid sm:grid-cols-6 sm:gap-6 md:grid-cols-12 md:gap-8\">\n <div className=\"sm:col-start-2 sm:col-span-4 md:col-start-4 md:col-span-6\">\n {overline && (\n <Paragraph size=\"body5\" styling=\"regular\" className=\"mb-3\">\n {overline}\n </Paragraph>\n )}\n\n {titleSlides.length === 1 ? (\n <Heading size=\"h1\" font=\"petco\" className=\"text-base-400 mb-4\">\n {titleSlides[0]}\n </Heading>\n ) : (\n <Heading\n size=\"h1\"\n font=\"petco\"\n className={clsx(\n 'mb-4',\n currentIndex === 0 && 'text-base-400',\n currentIndex === 1 && 'text-base-300',\n currentIndex === 2 && 'text-base-500'\n )}\n >\n {titleSlides[currentIndex]}\n </Heading>\n )}\n\n {body && <div className=\"mb-8\">{body}</div>}\n\n {button && <Button {...button} data-testid=\"cta-button\" />}\n </div>\n </div>\n {image.url && (\n <div className=\"absolute right-0 -bottom-2 w-3/5 text-right md:w-full\">\n <ContentfulImage\n src={image.url}\n alt={image.alt}\n width={image.width}\n height={image.height}\n />\n </div>\n )}\n </div>\n );\n};\n\nexport default HeroIllustration;\n","import { IButton } from '@/components/atoms/Button/Button';\nimport Paragraph from '@/components/atoms/Paragraph/Paragraph';\nimport HeroIllustration from '@/components/organisms/HeroIllustration/HeroIllustration';\nimport { addHttps } from '@/lib/utils/stringReplace/addHttps';\nimport {\n RenderNode,\n documentToReactComponents,\n} from '@contentful/rich-text-react-renderer';\nimport { BLOCKS, Document } from '@contentful/rich-text-types';\nimport { ContainerProps } from '@/lib/dataSource/contentful/containers';\n\n/**\n * @param {object} props - HeroIllustrationContainerProps\n * @returns {React.ReactNode} - HeroIllustrationContainer\n */\nexport const HeroIllustrationContainer = (\n props: ContainerProps['heroIllustration'] & {\n /** Classname */\n className?: string;\n }\n) => {\n const button = props.fields.actionLink\n ? ({\n children: props.fields.actionLink?.fields?.label,\n color: 'primary',\n size: 'md',\n type: 'button',\n href: props.fields.actionLink?.fields?.url,\n newTab:\n props.fields.actionLink?.fields?.target === '_blank' ? true : false,\n } as IButton)\n : undefined;\n\n /**\n * Render Headline\n *\n * @param {Document} headline - The headline\n * @returns {React.ReactElement} - Headline\n */\n function renderHeadline(headline: Document) {\n return documentToReactComponents(headline, {\n renderMark: {\n /**\n * Bold\n *\n * @param {string} text - The text to be bolded\n * @returns {React.ReactElement} Component\n */\n bold: (text) => <strong className=\"font-petco\">{text}</strong>,\n },\n renderNode: {\n /**\n * Embedded Asset\n *\n * @param {Document} node - The node\n * @param {string} children - The children\n * @returns {React.ReactElement} - Image Component\n */\n [BLOCKS.PARAGRAPH]: (node: Document, children: string) => (\n <span className=\"text-inherit\">{children}</span>\n ),\n } as unknown as RenderNode,\n });\n }\n\n const titleSlides = [];\n if (props.fields.headline) {\n titleSlides.push(renderHeadline(props.fields.headline));\n }\n if (props.fields.headlineSlide1) {\n titleSlides.push(renderHeadline(props.fields.headlineSlide1));\n }\n if (props.fields.headlineSlide2) {\n titleSlides.push(renderHeadline(props.fields.headlineSlide2));\n }\n\n return (\n <HeroIllustration\n overline={props.fields.overline}\n titleSlides={titleSlides}\n body={documentToReactComponents(props.fields.copyRichText, {\n renderMark: {\n // eslint-disable-next-line jsdoc/require-jsdoc\n bold: (text) => <strong className=\"font-petco\">{text}</strong>,\n },\n renderNode: {\n /**\n * Embedded Asset\n *\n * @param {Document} node - The node\n * @param {string} children - The children\n * @returns {React.ReactElement} - Image Component\n */\n [BLOCKS.PARAGRAPH]: (node: Document, children: string) => (\n <Paragraph size=\"body3\" font=\"petco\">\n {children}\n </Paragraph>\n ),\n } as unknown as RenderNode,\n })}\n image={{\n url: addHttps(props.fields.image?.fields.file?.url),\n alt: props.fields.image?.fields.description,\n width: props.fields.image?.fields.file?.details.image?.width || 560,\n height: props.fields.image?.fields.file?.details.image?.height || 430,\n }}\n button={button}\n />\n );\n};\n","import contentFulImageLoader from '@/component-library-lib/loaders/contentfulImageLoader';\nimport Divider from '@/components/atoms/Divider/Divider';\nimport ArticlesDisplay from '@/components/organisms/ArticlesDisplay/ArticlesDisplay';\nimport { ContainerProps } from '@/lib/dataSource/contentful/containers';\nimport { addHttps } from '@/lib/utils/stringReplace/addHttps';\n\n/**\n * @param {ContainerProps['relatedArticles']} props -\n * RelatedArticlesContainerProps\n * @returns {React.ReactNode} - RelatedArticlesContainer\n */\nexport const RelatedArticlesContainer = (\n props: ContainerProps['relatedArticles']\n) => {\n const { articles } = props.fields;\n\n const relatedArticles = articles.length\n ? articles.map(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (article: any) =>\n article && {\n title: article.fields.headline,\n excerpt: article.fields.excerpt,\n image: addHttps(article?.fields.featuredImage?.fields.file?.url),\n url: `/articles/${article?.fields.slugs}`,\n loader: contentFulImageLoader,\n }\n )\n : [];\n\n if (!relatedArticles.length) {\n return null;\n }\n\n return (\n <div className=\"page-max-w\" data-testid=\"related-articles-container\">\n <Divider type=\"lightGrey\" classes={`my-12 md:my-20`} />\n\n <ArticlesDisplay\n title=\"Related Articles\"\n articles={relatedArticles}\n buttonLink={{\n children: 'View All Articles',\n href: 'https://petcolove.org/lost/articles',\n variant: 'light',\n }}\n />\n </div>\n );\n};\n","import { contentful } from '@/component-library-lib/dataSource/contentful/client';\nimport { AccordionFaqContainer } from '@/component-library-lib/dataSource/contentful/containers/AccordionFaqContainer/AccordionFaqContainer';\nimport { ActionLinkContainer } from '@/component-library-lib/dataSource/contentful/containers/ActionLinkContainer/ActionLinkContainer';\nimport { CardContainer } from '@/component-library-lib/dataSource/contentful/containers/CardContainer/CardContainer';\nimport { DisplayTextContainer } from '@/component-library-lib/dataSource/contentful/containers/DisplayTextContainer/DisplayTextContainer';\nimport { ElementSliderContainer } from '@/component-library-lib/dataSource/contentful/containers/ElementSliderContainer/ElementSliderContainer';\nimport { FeatureCardContainer } from '@/component-library-lib/dataSource/contentful/containers/FeatureCardContainer/FeatureCardContainer';\nimport { FlexibleCardContainer } from '@/component-library-lib/dataSource/contentful/containers/FlexibleCardContainer/FlexibleCardContainer';\nimport { FullWidthCalloutBackgroundColorContainer } from '@/component-library-lib/dataSource/contentful/containers/FullWidthCalloutBackgroundColorContainer/FullWidthCalloutBackgroundColorContainer';\nimport { HeroContainer } from '@/component-library-lib/dataSource/contentful/containers/HeroContainer/HeroContainer';\nimport { IconCardContainer } from '@/component-library-lib/dataSource/contentful/containers/IconCardContainer/IconCardContainer';\nimport { IframeContainer } from '@/component-library-lib/dataSource/contentful/containers/IframeContainer/IframeContainer';\nimport { ImageContent1By1Container } from '@/component-library-lib/dataSource/contentful/containers/ImageContent1By1Container/ImageContent1By1Container';\nimport { LinkListContainer } from '@/component-library-lib/dataSource/contentful/containers/LinkListContainer/LinkListContainer';\nimport { LogoGridContainer } from '@/component-library-lib/dataSource/contentful/containers/LogoGridContainer/LogoGridContainer';\nimport { MediaElementContainer } from '@/component-library-lib/dataSource/contentful/containers/MediaElementContainer/MediaElementContainer';\nimport { PetAndOwnerCardContainer } from '@/component-library-lib/dataSource/contentful/containers/PetAndOwnerCardContainer/PetAndOwnerCardContainer';\nimport { ReunionCardContainer } from '@/component-library-lib/dataSource/contentful/containers/ReunionCardContainer/ReunionCardContainer';\nimport { RichTextContainer } from '@/component-library-lib/dataSource/contentful/containers/RichTextContainer/RichTextContainer';\nimport { SeparatorContainer } from '@/component-library-lib/dataSource/contentful/containers/SeparatorContainer/SeparatorContainer';\nimport { SideBySideContainer } from '@/component-library-lib/dataSource/contentful/containers/SideBySideContainer/SideBySideContainer';\nimport { SplitContentContainer } from '@/component-library-lib/dataSource/contentful/containers/SplitContentContainer/SplitContentContainer';\nimport { StatsTickerContainer } from '@/component-library-lib/dataSource/contentful/containers/StatsTickerContainer/StatsTickerContainer';\nimport { TeamCardContainer } from '@/component-library-lib/dataSource/contentful/containers/TeamCardContainer/TeamCardContainer';\nimport { TextBannerContainer } from '@/component-library-lib/dataSource/contentful/containers/TextBannerContainer/TextBannerContainer';\nimport { TypeFormContainer } from '@/component-library-lib/dataSource/contentful/containers/TypeFormContainer/TypeFormContainer';\nimport { UnevenCardContainer } from '@/component-library-lib/dataSource/contentful/containers/UnevenCardContainer/UnevenCardContainer';\nimport { VideoPlayerContainer } from '@/component-library-lib/dataSource/contentful/containers/VideoPlayerContainer/VideoPlayerContainer';\nimport { Topics } from '@/component-library-lib/dataSource/contentful/models/topics';\nimport AnimateItem from '@/component-library/atoms/AnimateItem/AnimateItem';\nimport { ContainerProps } from '@/lib/dataSource/contentful/containers';\nimport { BlockContainer } from '@/lib/dataSource/contentful/containers/BlockContainer/BlockContainer';\nimport { CarouselContainer } from '@/lib/dataSource/contentful/containers/CarouselContainer/CarouselContainer';\nimport { FullWidthCalloutContainer } from '@/lib/dataSource/contentful/containers/FullWidthCalloutContainer/FullWidthCalloutContainer';\nimport { GraphicHeroContainer } from '@/lib/dataSource/contentful/containers/GraphicHeroContainer/GraphicHeroContainer';\nimport { HeroHomeContainer } from '@/lib/dataSource/contentful/containers/HeroHomeContainer/HeroHomeContainer';\nimport { HeroIllustrationContainer } from '@/lib/dataSource/contentful/containers/HeroIllustrationContainer/HeroIllustrationContainer';\nimport { RelatedArticlesContainer } from '@/lib/dataSource/contentful/containers/RelatedArticlesContainer/RelatedArticlesContainer';\nimport { Custom } from '@/lib/dataSource/contentful/models/layouts/custom';\nimport { Fragment } from 'react';\n\n/** Simulates a \"Custom Page\" response from Contentful */\nexport type CustomPageResponse = Awaited<\n ReturnType<\n typeof contentful.withoutUnresolvableLinks.getEntry<\n Custom['LostCustomPage']\n >\n >\n>;\n\n/** The Custom Page's Elements union type to be resolved in the iterable */\ntype PageElementProps = CustomPageResponse['fields']['elements'][number] & {\n /** The key for the JSX.Element */\n key: string;\n};\n\n/** Simulates a \"Block\" response from Contentful */\nexport type BlockResponse = Awaited<\n ReturnType<\n typeof contentful.withoutUnresolvableLinks.getEntry<Topics['Block']>\n >\n>;\n\n/** The Block's Elements union type to be resolved in the iterable */\ntype BlockElementProps = NonNullable<\n BlockResponse['fields']['elements']\n>[number];\n\n/** Assembly Factory */\nclass AssemblyFactory {\n /** The map of page elements */\n private _pageElementsMap = {\n /**\n * @param {PageElementProps} props - The props for the Video Player\n * @returns {React.ReactNode} - The Video Player\n */\n videoPlayer: (props: PageElementProps) => {\n const { key, ...rest } = props;\n return (\n <VideoPlayerContainer\n key={key}\n {...(rest as ContainerProps['videoPlayer'])}\n />\n );\n },\n /**\n * @param {PageElementProps} props - The props for the Rich Text\n * @returns {React.ReactNode} - The Rich Text\n */\n richText: (props: PageElementProps) => {\n const { key, ...rest } = props;\n return (\n <AnimateItem key={key} from={{ translateY: 20 }}>\n <RichTextContainer {...(rest as ContainerProps['richText'])} />\n </AnimateItem>\n );\n },\n\n /**\n * @param {PageElementProps} props - The props for the FAQ\n * @returns {React.ReactNode} - The FAQ\n */\n faq: (props: PageElementProps) => {\n const { key, ...rest } = props;\n return (\n <AccordionFaqContainer\n key={key}\n {...(rest as ContainerProps['faq'])}\n className=\"py-0\"\n />\n );\n },\n\n /**\n * @param {PageElementProps} props - The props for the Separator\n * @returns {React.ReactNode} - Separator\n */\n separator: (props: PageElementProps) => {\n const { key, ...rest } = props;\n return (\n <SeparatorContainer\n key={key}\n {...(rest.fields as ContainerProps['separator']['fields'])}\n />\n );\n },\n\n /**\n * @param {PageElementProps} props - The props for the Hero\n * @returns {React.ReactNode} - The Hero\n */\n hero: (props: PageElementProps) => {\n const { key, ...rest } = props;\n return <HeroContainer key={key} {...(rest as ContainerProps['hero'])} />;\n },\n\n /**\n * @param {PageElementProps} props - The props for the Hero\n * @returns {React.ReactNode} - The GraphicHero\n */\n graphicHero: (props: PageElementProps) => {\n const { key, ...rest } = props;\n return (\n <GraphicHeroContainer\n key={key}\n {...(rest as ContainerProps['graphicHero'])}\n />\n );\n },\n\n /**\n * @param {PageElementProps} props - The props for the HeroHome\n * @returns {React.ReactNode} - The HeroHome\n */\n heroHome: (props: PageElementProps) => {\n const { key, ...rest } = props;\n return (\n <HeroHomeContainer\n key={key}\n {...(rest as ContainerProps['heroHome'])}\n />\n );\n },\n\n /**\n * @param {PageElementProps} props - The props for the FAQ\n * @returns {React.ReactNode} - The FAQ\n */\n heroIllustration: (props: PageElementProps) => {\n const { key, ...rest } = props;\n return (\n <HeroIllustrationContainer\n key={key}\n {...(rest as ContainerProps['heroIllustration'])}\n />\n );\n },\n\n /**\n * @param {PageElementProps} props - The props for the carousel\n * @returns {React.ReactNode} - The Carousel\n */\n carousel: (props: PageElementProps) => {\n const { key, ...rest } = props;\n return (\n <CarouselContainer\n key={key}\n {...(rest as ContainerProps['carousel'])}\n />\n );\n },\n\n /**\n * @param {PageElementProps} props - The props for the FAQ\n * @returns {React.ReactNode} - The FAQ\n */\n sideBySide: (props: PageElementProps) => {\n const { key, ...rest } = props;\n return (\n <SideBySideContainer\n key={key}\n {...(rest as ContainerProps['sideBySide'])}\n />\n );\n },\n\n /**\n * @param {PageElementProps} props - The props for the Full Width Callout\n * @returns {React.ReactNode} - The Full Width Callout\n */\n fullWidthCalloutImage: (props: PageElementProps) => {\n const { key, ...rest } = props;\n return (\n <FullWidthCalloutContainer\n key={key}\n {...(rest as ContainerProps['fullWidthCalloutImage'])}\n />\n );\n },\n\n /**\n * @param {PageElementProps} props - The props for the Display Text\n * @returns {React.ReactNode} - The Display Text\n */\n displayText: (props: PageElementProps) => {\n const { key, ...rest } = props;\n return (\n <DisplayTextContainer\n key={key}\n {...(rest as ContainerProps['displayText'])}\n />\n );\n },\n\n /**\n * @param {PageElementProps} props - The props for the Block\n * @returns {React.ReactNode} - The Block\n */\n block: (props: PageElementProps) => {\n const { key, ...rest } = props;\n return (\n <BlockContainer key={key} {...(rest as ContainerProps['block'])} />\n );\n },\n\n /**\n * @param {PageElementProps} props - The props for the Block\n * @returns {React.ReactNode} - The Block\n */\n relatedArticles: (props: PageElementProps) => {\n const { key, ...rest } = props;\n return (\n <RelatedArticlesContainer\n key={key}\n {...(rest as ContainerProps['relatedArticles'])}\n />\n );\n },\n\n /**\n * @param {PageElementProps} props - The props for the SplitContent\n * @returns {React.ReactNode} - The SplitContent\n */\n splitContent: (props: PageElementProps) => {\n const { key, ...rest } = props;\n return (\n <SplitContentContainer\n key={key}\n {...(rest as ContainerProps['splitContent'])}\n />\n );\n },\n\n /**\n * @param {PageElementProps} props - The props.\n * @returns {React.ReactNode} - The component\n */\n logoGrid: (props: PageElementProps) => {\n const { key, ...rest } = props;\n return (\n <LogoGridContainer\n key={key}\n {...(rest as ContainerProps['logoGrid'])}\n />\n );\n },\n\n /**\n * @param {PageElementProps} props - The props.\n * @returns {React.ReactNode} - The component\n */\n imageContent1By1: (props: PageElementProps) => {\n const { key, ...rest } = props;\n return (\n <ImageContent1By1Container\n key={key}\n {...(rest as ContainerProps['imageContent1By1'])}\n />\n );\n },\n\n /**\n * @param {PageElementProps} props - The props.\n * @returns {React.ReactNode} - The component\n */\n typeForm: (props: PageElementProps) => {\n const { key, ...rest } = props;\n\n return (\n <TypeFormContainer\n key={key}\n {...(rest as ContainerProps['typeForm'])}\n />\n );\n },\n /**\n * @param {PageElementProps} props - The props for the Link List\n * @returns {React.ReactNode} - The Link List\n */\n linkList: (props: PageElementProps) => (\n <LinkListContainer\n {...(props as ContainerProps['linkList'])}\n key={props.key}\n />\n ),\n /**\n * @param {PageElementProps} props - The props for the Hero\n * @returns {React.ReactNode} - The Hero\n */\n fullWidthCalloutBackgroundColor: (props: PageElementProps) => (\n <FullWidthCalloutBackgroundColorContainer\n {...(props as ContainerProps['fullWidthCalloutBackgroundColor'])}\n key={props.key}\n />\n ),\n /**\n * @param {PageElementProps} props - The props for the Iframe\n * @returns {React.ReactNode} - The iframe\n */\n iframe: (props: PageElementProps) => (\n <IframeContainer\n {...(props as ContainerProps['iframe'])}\n key={props.key}\n />\n ),\n /**\n * @param {PageElementProps} props - The props for the UnevenCard\n * @returns {React.ReactNode} - The UnevenCard\n */\n unevenCard: (props: PageElementProps) => (\n <UnevenCardContainer\n {...(props as ContainerProps['unevenCard'])}\n key={props.key}\n />\n ),\n /**\n * @param {PageElementProps} props - The props for the Donation Form\n * @returns {React.ReactNode} - The Donation Form\n */\n textBanner: (props: PageElementProps) => (\n <TextBannerContainer\n {...(props as ContainerProps['textBanner'])}\n key={props.key}\n />\n ),\n };\n\n /** The map of block elements */\n private _blockElementsMap = {\n /**\n * @param {BlockElementProps} props - The props for the Card\n * @returns {React.ReactNode} - The Card\n */\n card: (props: BlockElementProps) => (\n <CardContainer {...(props as ContainerProps['card'])} />\n ),\n\n /**\n * @param {BlockElementProps} props - The props for the Feature Card\n * @returns {React.ReactNode} - The Feature Card\n */\n featureCard: (props: BlockElementProps) => (\n <FeatureCardContainer {...(props as ContainerProps['featureCard'])} />\n ),\n\n /**\n * @param {BlockElementProps} props - The props for the Flexible Card\n * @returns {React.ReactNode} - The Flexible Card\n */\n flexibleCard: (props: BlockElementProps) => (\n <FlexibleCardContainer {...(props as ContainerProps['flexibleCard'])} />\n ),\n\n /**\n * @param {BlockElementProps} props - The props for the Team Card\n * @returns {React.ReactNode} - The Team Card\n */\n teamCard: (props: BlockElementProps) => (\n <TeamCardContainer {...(props as ContainerProps['teamCard'])} />\n ),\n\n /**\n * @param {BlockElementProps} props - The props for the Reunion Card\n * @returns {React.ReactNode} - The Reunion Card\n */\n reunionCard: (props: BlockElementProps) => (\n <ReunionCardContainer {...(props as ContainerProps['reunionCard'])} />\n ),\n\n /**\n * @param {BlockElementProps} props - The props for the Pet And Owner Card\n * @returns {React.ReactNode} - The Pet And Owner Card\n */\n petAndOwnerCard: (props: BlockElementProps) => (\n <PetAndOwnerCardContainer\n {...(props as ContainerProps['petAndOwnerCard'])}\n />\n ),\n\n /**\n * @param {BlockElementProps} props - The props for the Display Text\n * @returns {React.ReactNode} - The Display Text\n */\n displayText: (props: BlockElementProps) => (\n <DisplayTextContainer {...(props as ContainerProps['displayText'])} />\n ),\n\n /**\n * @param {BlockElementProps} props - The props for the Icon Card\n * @returns {React.ReactNode} - The Icon Card\n */\n iconCard: (props: BlockElementProps) => (\n <IconCardContainer {...(props as ContainerProps['iconCard'])} />\n ),\n /**\n * @param {BlockElementProps} props - The props for the Action Link\n * @returns {React.ReactNode} - The Action Link\n */\n actionLink: (props: BlockElementProps) => (\n <ActionLinkContainer {...(props as ContainerProps['actionLink'])} />\n ),\n /**\n * @param {BlockElementProps} props - The props for the Element Slider\n * @returns {React.ReactNode} - The Element Slider\n */\n elementSlider: (props: BlockElementProps) => (\n <ElementSliderContainer {...(props as ContainerProps['elementSlider'])} />\n ),\n /**\n * @param {BlockElementProps} props - The props for the Media Element\n * @returns {React.ReactNode} - The Media Element\n */\n mediaElement: (props: BlockElementProps) => (\n <MediaElementContainer {...(props as ContainerProps['mediaElement'])} />\n ),\n /**\n * @param {BlockElementProps} props - The props for the Stats Ticker\n * @returns {React.ReactNode} - The Stats Ticker\n */\n statsTicker: (props: BlockElementProps) => (\n <StatsTickerContainer {...(props as ContainerProps['statsTicker'])} />\n ),\n };\n\n /**\n * @param {PageElementProps[]} nodes - The nodes to iterate over\n * @returns {React.ReactNode[]} - The JSX.Elements\n */\n public createPageElements(nodes: CustomPageResponse['fields']['elements']) {\n return (\n <>\n {nodes?.map((node, idx) => {\n if (node?.sys.contentType.sys.id)\n return this._pageElementsMap[node.sys.contentType.sys.id]?.({\n ...node,\n key: node.sys.id + idx,\n });\n })}\n <SeparatorContainer color=\"white\" size=\"default\" />\n </>\n );\n }\n\n /**\n * @param {BlockElementProps[]} nodes - The nodes to iterate over\n * @param {boolean} addAnimation - Whether to add the animation\n * @returns {React.ReactNode[]} - The JSX.Elements\n */\n public createBlockElements(\n nodes: BlockResponse['fields']['elements'],\n addAnimation = true\n ) {\n return nodes?.map((node, idx) => {\n if (node?.sys.contentType.sys.id)\n return addAnimation ? (\n <AnimateItem\n key={node.sys.id}\n from={{ translateY: 20 }}\n delay={(idx * 3) / 10}\n className=\"w-full\"\n >\n {this._blockElementsMap[node.sys.contentType.sys.id]?.(node)}\n </AnimateItem>\n ) : (\n <Fragment key={node.sys.id}>\n {this._blockElementsMap[node.sys.contentType.sys.id]?.(node)}\n </Fragment>\n );\n });\n }\n}\n\nexport const assemblyFactory = new AssemblyFactory();\n","import { getClient } from '@/component-library-lib/dataSource/contentful/client';\nimport { Topics } from '@/component-library-lib/dataSource/contentful/models/topics';\nimport BlankLayout from '@/components/layouts/BlankLayout/BlankLayout';\nimport MinimalLayout from '@/components/layouts/MinimalLayout/MinimalLayout';\nimport NoFooterLayout from '@/components/layouts/NoFooterLayout/NoFooterLayout';\nimport PrimaryLayout from '@/components/layouts/PrimaryLayout/PrimaryLayout';\nimport ButtonPreview from '@/components/molecules/ButtonPreview/ButtonPreview';\nimport HeadTemplate from '@/components/templates/Head/Head';\nimport { assemblyFactory } from '@/lib/dataSource/contentful/assemblyFactory';\nimport {\n getContentfulLocale,\n InferContentfulResponse,\n} from '@/component-library-lib/dataSource/contentful/helpers';\nimport { Custom } from '@/lib/dataSource/contentful/models/layouts/custom';\nimport {\n ContentfulLivePreviewProvider,\n useContentfulLiveUpdates,\n} from '@contentful/live-preview/react';\nimport {\n GetServerSidePropsContext,\n InferGetServerSidePropsType,\n NextPage,\n} from 'next';\nimport { ReactElement, ReactNode } from 'react';\n\n/** The props for the Custom Page */\nexport type CustomPageProps = InferGetServerSidePropsType<\n typeof getServerSideProps\n>;\n\n/**\n * Custom Page\n *\n * @param {CustomPageProps} props - The props for the Custom Page\n * @returns {React.FC<CustomPageProps>} - The Custom Page\n */\nconst CustomPage: NextPage = (props: CustomPageProps) => {\n const updatedEntries = useContentfulLiveUpdates(props);\n\n return (\n <ContentfulLivePreviewProvider locale=\"en-US\">\n <div data-testid=\"custom-page\">\n <HeadTemplate\n title={updatedEntries.fields.title}\n description={updatedEntries.fields.description}\n noIndex={!updatedEntries.fields.seoIndex}\n />\n {props.preview && <ButtonPreview />}\n {assemblyFactory.createPageElements(updatedEntries.fields.elements)}\n </div>\n </ContentfulLivePreviewProvider>\n );\n};\n\n/**\n * Setup Contentful Layout\n *\n * @param {ReactElement} page - Page Content\n * @returns {ReactNode} Page Results\n */\nCustomPage.getLayout = (page: ReactElement<CustomPageProps>): ReactNode => {\n switch (page.props.children.props?.fields?.layoutType) {\n case 'Minimal layout':\n return <MinimalLayout>{page.props.children}</MinimalLayout>;\n case 'No footer layout':\n return <NoFooterLayout>{page}</NoFooterLayout>;\n case 'Blank layout':\n return <BlankLayout>{page}</BlankLayout>;\n case 'Primary layout':\n return <PrimaryLayout>{page}</PrimaryLayout>;\n default:\n return <MinimalLayout>{page}</MinimalLayout>;\n }\n};\n\nexport default CustomPage;\n\n/**\n * @param {object} context - The context object\n * @returns {object} - The props object\n */\nexport const getServerSideProps = async (\n context: GetServerSidePropsContext<{\n /** The locale */\n locale?: string;\n /** The slug */\n slug: string;\n }>\n) => {\n const isPreviewEnabled = context?.previewData ? true : false;\n\n const data = await getClient(\n isPreviewEnabled\n ).withoutUnresolvableLinks.getEntries<Custom['LostCustomPage']>({\n content_type: 'lostCustomPage',\n 'fields.slugs': context.params?.slug || '/',\n locale: getContentfulLocale(context.locale),\n include: 10,\n });\n\n /**\n * Fixing circular reference error: The data structure of the article contains\n * references to the `acrossArticleCards` that in turn contains references to\n * the `acrossArticleCards` and so on. This was creating a circular reference\n * between the items, which can lead to unexpected behavior and memory leaks.\n * To fix the issue, we are assigning `null` to the `acrossArticleCards`\n * property of each item in the array, if the array exists. This breaks the\n * circular reference and prevents any potential issues.\n */\n try {\n if (data.items?.length > 0 && data.items[0]?.fields?.elements) {\n data.items[0].fields.elements.forEach((element) => {\n if (element?.sys.contentType.sys.id === 'relatedArticles') {\n const fields = (\n element as InferContentfulResponse<Topics['RelatedArticles']>\n )?.fields;\n\n const relatedArticles = fields?.articles\n ? fields.articles.map((article) => {\n if (article) {\n article.fields.acrossArticleCards = [];\n }\n return article;\n })\n : [];\n element.fields = {\n articles: relatedArticles,\n };\n }\n });\n }\n } catch (error) {\n console.error(error);\n\n return {\n notFound: true,\n };\n }\n\n if (!data.items.length) {\n return {\n notFound: true,\n };\n }\n\n return {\n props: {\n ...data.items[0],\n preview: isPreviewEnabled,\n },\n };\n};\n"],"names":["window","__NEXT_P","push","__webpack_require__","variantClasses","primary","light","dark","lightBlue","pink","secondary","tertiary","disabledStyles","removeFocusStyles","__webpack_exports__","Z","variant","href","as","disabled","children","replace","scroll","shallow","passHref","className","color","rest","param","variantStyles","cls","wrapperFocusStyles","concat","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","jsx","div","Link","HeadingTag","size","font","headingFontClass","headingFontClasses","tagClasses","fontTypeClass","petco","amasis","bodySizeClasses","body1","body2","body3","body4","body5","overline","text","classes","jsxs","Icon","icon","colorType","colorShade","span","h2","accentProps","ORG","ADOPT","CARE","utils_youtubeParser","match","exec","url","videoId","length","jsx_runtime","iframe","title","src","allow","allowFullScreen","RichTextContainer","columTablet","props","fields","columnsTablet","columDesktop","columnsDesktop","clsx","useContainer","twMerge","customClasses","documentToReactComponents","content","renderNode","BLOCKS","HEADING_1","_","Heading","HEADING_2","HEADING_3","HEADING_4","HEADING_5","HEADING_6","LIST_ITEM","li","QUOTE","AnimateItem","delay","Quote","EMBEDDED_ASSET","ContentfulImage","width","node","data","target","file","details","image","height","alt","addHttps","INLINES","HYPERLINK","uri","includes","youtubeParser","anchorTarget","PARAGRAPH","textStyle","fontSize","contentTextSize","textAlign","contentTextAlignment","undefined","contentColor","p","style","AccentContext","createContext","useAccent","currentAccentContext","useContext","ZP","defaultAccent","accent","setAccent","useState","Provider","value","updateAccent","newAccent","OverlayContext","useOverlay","currentOverlayContext","defaultOverlay","show","setShow","updateShow","newOverlay","quality","isPetcoLink","startsWith","a","rel","CdnImage","renderBreakLine","split","flatMap","i","br","dividerClassMap","darkGrey","lightGrey","white","type","dividerClasses","hr","Fragment","Head","main","Navbar","minimal","ToastHandler","Footer","mockFooterProps","base","hasMessage","isFetchingUser","isLoggedIn","isShelter","useUserContext","loggedIn","CardArticle_CardArticle","excerpt","imageClasses","loader","Image","layout","objectFit","sizes","Paragraph","ArticlesDisplay_ArticlesDisplay","articles","buttonLink","from","translateY","ButtonLink","map","article","index","CardArticle","contentFulImageLoader","baseClass","options","renderMark","MARKS","BOLD","strong","ITALIC","em","renderText","body","bodyRichText","button1","button2","imageUrl","imageOpacity","TextWrapper","firstButton","secondButton","Wrapper","Button","objectPosition","opacity","stylingMap","success","error","warning","info","iconMap","Toast_Toast","closeClick","showIcon","baseToastClasses","tabletSizing","desktopSizing","toastClasses","styling","button","onClick","ToastHandler_ToastHandler","initialToast","timeToShow","toastContext","useToastContext","toastDispatch","dispatch","toastState","state","useEffect","useCheckAndDispatchToastFromStorage","closeToast","currentToast","toasts","toast","message","id","persistent","setTimeout","Toast","EventLogHandler","AbstractAnalyticsHandler","send","getAnalyticsFeature","KlaviyoEventHandler","eventData","attributes","properties","time","Date","metric","name","profile","axios","getBasePath","logEventHandler","googleTagManagerBrand","gtmEventHandler","GoogleTagManagerHandler","klaviyoEventHandler","EventEmitter","defaultEventEmitter","handleEvent","handlers","forEach","handler","constructor","cookies","CookieStorage","optimizelyDecision","get","analyticsFeatureKey","feature","notApplicableString","analytic","brand","dataObject","gtag","flagShelterPersistentSearch","flagMapSearchResults","flagMicrochipCreationSearch","flagFacebookIntegration","flagStaticMapInAddressStep","defaultSearchRadius","defaultSearchRadiusIndex","petcoLoveHQCoordinates","latitude","longitude","sdk","initSDK","pllApiBaseUrl","process","pllWebsocketBaseUrl","PetcoLoveSDK","useOptimizelyFeature","overrideCookie","featureFlagOverrideKey","enabled","setEnabled","flag","decision","clientReady","useDecision","toastInitialValue","ToastContext","ToastReducer","action","updatedToasts","filter","e","ToastProvider","useReducer","buildToastPayload","STORAGE_TOAST_KEY","useSaveToastToStorage","storage","LocalStorage","set","expires","tomorrow","delete","JSON","stringify","totalUnread","authToken","userEntityId","conversations","conversationsTotalUnread","contextId","read","UserContext","userType","unreadMessageCount","fetchingUnreadMessageCount","getUnreadMessagesForUser","setUnreadMessageCount","UserContextProvider","idToken","me","isError","errorMessage","useMe","setFetchingUnreadMessageCount","useMemo","awos","user","useCallback","unread","useComponentFocused","initialIsFocused","isComponentFocused","setIsComponentFocused","ref","useRef","handleClickOutside","current","contains","event","document","addEventListener","removeEventListener","startAddPetEventHandler","clickText","context","petStatus","listingSource","species","click_text","items","pet_id","pet_name","pet_status","listing_source","location_id","key","capitalizeFirstLetter","str","toUpperCase","slice","ObjectsHelpers_getExpirationDate","expiration","expirationDate","isNaN","getTime","stringHelpers_parseToJSONSafe","parse","SessionStorage","AbstractStorage","isAvailable","sessionStorage","getItem","parsedData","parseToJSONSafe","getExpirationDate","config","setItem","removeItem","ButtonPreview_ButtonPreview","prefetch","AccordionContent_AccordionContent","contentItem","Disclosure","open","header","Panel","AccordionFaq_AccordionFaq","subTitle","AccordionContent","renderOptions","UL_LIST","ul","AccordionFaqContainer","AccordionFaq","headline","copy","rows","item","copyRichText","load","LoadingSpinner_LoadingSpinner","loaderSVG","sm","md","lg","loadingSizes","buttonClasses","cva","variants","destructive","loading","compoundVariants","class","getSizeClasses","Button_Button","fullWidth","newTab","sizeCls","buttonState","buttonClass","LoadingSpinner","ActionLinkContainer","translateX","aria-label","label","overlay","CardImage_CardImage","aspectClass","aspectRatio","InfoGraphicCard_InfoGraphicCard","description","descriptionRichText","noLoader","img","CardContainer","actionLink","componentStyle","CardImage","InfoGraphicCard","DisplayText_DisplayText","heading","PageWrapper_PageWrapper","DisplayTextContainer","widthClass","Full","Wide","Thin","PageWrapper","duration","DisplayText","bold","carouselButtonClasses","active","CarouselButton_CarouselButton","hovered","setHovered","iconColorShade","iconColorType","onMouseEnter","onMouseLeave","ElementSliderContainer","element","activeIndex","setActiveIndex","slideDirection","setSlideDirection","elements","sys","quote","author","CarouselButton","FeatureCard_FeatureCard","category","FeatureCardContainer","FeatureCard","FlexibleCard_FlexibleCard","useVariant","italic","FlexibleCardContainer","FlexibleCard","FullWidthCalloutBackgroundColor_FullWidthCalloutBackgroundColor","richCopy","backgroundColor","altTitle","FullWidthCalloutBackgroundColorContainer","FullWidthCalloutBackgroundColor","actionLink1","actionLink2","bgColors","waveBorders","Hero_Hero","richHeadline","bgImage","waveBorderColor","priority","HeroContainer","Hero","backgroundImage","Blobs_BlobList","blobOne","svg","viewBox","fill","xmlns","path","d","blobTwo","blobThree","blobFour","chooseBlob","SelectedBlob","BlobList","blob","Blob_Blob","Colors","IconCard_IconCard","iconColor","hideBlob","blobBackgroundColor","Blob","IconCardContainer","selectedBlob","selectedBackgroundColor","selectedIconColor","iconBackgroundColor","removeBackground","IconCard","IframeContainer","source","ImageContent1by1_ImageContent1by1","imageSrc","imageAlt","orientation","hideBackground","ImageContent1By1Container","preventDefault","ImageContent1by1","baseClasses","labelClasses","inputClasses","errorMessageClasses","InputError_InputError","role","InputDropDown_InputDropDown","values","readOnly","onChange","inputValue","setInputValue","labelClass","inputClass","chevronColorShade","chevronColorType","isInputValue","inputDisabledClasses","labelDisabledClasses","Listbox","Label","Transition","enter","enterFrom","leave","leaveFrom","leaveTo","Options","static","Option","selected","InputError","currentYear","getFullYear","LinkList_LinkList","displayYearFilter","links","onYearChange","activeYear","setActiveYear","toString","years","Array","yearsOptions","reverse","year","formattedDate","date","toLocaleDateString","month","day","InputDropDown","link","displayDate","suppressHydrationWarning","LinkListContainer","petcoLoveDomain","env","NEXT_PUBLIC_PETCOLOVE_DOMAIN","generateLinks","contentType","rssItem","pressItem","publishDate","slugs","sort","b","LinkList","LogoGrid_LogoGrid","logos","useWindowSize","columns","breakpoint","logo","LogoGridContainer","LogoGrid","MediaElementContainer","mediaElement","PetAndOwnerCard_PetAndOwnerCard","petName","ownerName","PetAndOwnerCardContainer","PetAndOwnerCard","ReunionCardContainer","CarouselItemReunion","SeparatorContainer","colorMap","SideBySide_SideBySide","imagePosition","SideBySideContainer","SideBySide","SplitContent_SplitContent","background","SplitContentContainer","SplitContent","media","StatTickerCard_StatTickerCard","numberStart","numberEnd","prefix","postfix","imageWidth","imageHeight","inView","useInView","threshold","triggerOnce","CountUp","start","end","separator","decimals","Number","isInteger","decimal","suffix","useEasing","countUpRef","StatsTickerContainer","StatTickerCard","ellipse","TeamCard_TeamCard","TeamCardContainer","TeamCard","TextBannerContainer","TypeFormContainer","Widget","formId","autoResize","inlineOnMobile","UnevenCard_UnevenCard","featureCardAcross","featureCardLeft","featureCardMiddle","featureCardRight","card","idx","UnevenCardContainer","cards","UnevenCard","VideoPlayerContainer","VideoPlayer","video","videoUrl","muted","topPaddingValues","none","xsmall","small","medium","large","default","bottomPaddingValues","BlockContainer","topPadding","bottomPadding","keepPadding","actionLinkOrientation","assemblyFactory","createBlockElements","CarouselContainer","Carousel","navigationButtons","verticalOffsetClass","dotNavigation","dotClass","fontSizeClass","removeBasePath","basePath","FullWidthCalloutContainer","setInitiatingComponent","useEventContext","handleOnClick","FullWidthCalloutImage","to","GraphicHero_GraphicHero","featureImage","buttons","ButtonItem","iFoundAPetHref","staticContent","optionsHeader","optionsCopy","GraphicHeroContainer","useUser","router","useRouter","cleanQueryParams","queryWithoutSlug","query","slug","loggedOutButtons","hero","loggedOut","lost","initiatingComponent","startPetSearchEventHandler","component","flow","pathname","found","loggedInUserButtons","manage","loggedInShelterButtons","logout","localStorage","clear","GraphicHero","HeroHomepage_HeroHomepage","bgColor","HeroHomeContainer","HeroHomepage","HeroIllustration_HeroIllustration","titleSlides","currentIndex","setCurrentIndex","interval","setInterval","prev","clearInterval","HeroIllustrationContainer","renderHeadline","headlineSlide1","headlineSlide2","HeroIllustration","RelatedArticlesContainer","relatedArticles","featuredImage","Divider","ArticlesDisplay","createPageElements","nodes","_this__pageElementsMap_node_sys_contentType_sys_id","_this__pageElementsMap","_pageElementsMap","call","addAnimation","_this__blockElementsMap_node_sys_contentType_sys_id","_this__blockElementsMap","_this__blockElementsMap_node_sys_contentType_sys_id1","_this__blockElementsMap1","_blockElementsMap","videoPlayer","richText","faq","graphicHero","heroHome","heroIllustration","carousel","sideBySide","fullWidthCalloutImage","displayText","block","splitContent","logoGrid","imageContent1By1","typeForm","linkList","react","createElement","fullWidthCalloutBackgroundColor","unevenCard","textBanner","featureCard","flexibleCard","teamCard","reunionCard","petAndOwnerCard","iconCard","elementSlider","statsTicker","CustomPage","updatedEntries","useContentfulLiveUpdates","ContentfulLivePreviewProvider","locale","HeadTemplate","noIndex","seoIndex","preview","ButtonPreview","getLayout","page","layoutType","MinimalLayout","NoFooterLayout","BlankLayout","PrimaryLayout","_slug_"],"sourceRoot":""}